Mybatis連表查詢的SQL語(yǔ)句怎樣寫(xiě)

小樊
84
2024-09-15 12:15:34
欄目: 云計(jì)算

在 MyBatis 中,你可以編寫(xiě)連表查詢的 SQL 語(yǔ)句,然后在映射文件中定義這個(gè)查詢。以下是一個(gè)簡(jiǎn)單的示例,展示了如何在 MyBatis 中編寫(xiě)連表查詢的 SQL 語(yǔ)句。

首先,假設(shè)我們有兩個(gè)數(shù)據(jù)庫(kù)表:userorder,它們之間的關(guān)系是一個(gè)用戶可以有多個(gè)訂單。

-- user 表
CREATE TABLE user (
    id INT PRIMARY KEY,
    name VARCHAR(255) NOT NULL
);

-- order 表
CREATE TABLE order (
    id INT PRIMARY KEY,
    user_id INT,
    amount DECIMAL(10, 2),
    FOREIGN KEY (user_id) REFERENCES user(id)
);

接下來(lái),我們?cè)?MyBatis 的映射文件中編寫(xiě)連表查詢的 SQL 語(yǔ)句。假設(shè)我們要查詢每個(gè)用戶及其對(duì)應(yīng)的訂單信息。

<!-- UserOrderMapper.xml -->
<mapper namespace="com.example.mapper.UserOrderMapper">
   <resultMap id="UserOrderResultMap" type="com.example.model.UserOrder">
        <id property="userId" column="user_id"/>
       <result property="userName" column="user_name"/>
       <collection property="orders" ofType="com.example.model.Order">
            <id property="orderId" column="order_id"/>
           <result property="amount" column="order_amount"/>
        </collection>
    </resultMap>

   <select id="getUserOrders" resultMap="UserOrderResultMap">
        SELECT u.id as user_id, u.name as user_name, o.id as order_id, o.amount as order_amount
        FROM user u
        LEFT JOIN order o ON u.id = o.user_id
    </select>
</mapper>

在上面的示例中,我們首先定義了一個(gè)名為 UserOrderResultMap 的結(jié)果映射,它將查詢結(jié)果映射到 UserOrder 類。然后,我們編寫(xiě)了一個(gè)名為 getUserOrders 的查詢,它使用 LEFT JOINuserorder 表中獲取數(shù)據(jù)。

最后,我們需要?jiǎng)?chuàng)建一個(gè)接口,用于與映射文件關(guān)聯(lián)。

// UserOrderMapper.java
package com.example.mapper;

import com.example.model.UserOrder;
import java.util.List;

public interface UserOrderMapper {
    List<UserOrder> getUserOrders();
}

現(xiàn)在,你可以在你的業(yè)務(wù)邏輯中調(diào)用 getUserOrders 方法來(lái)執(zhí)行連表查詢。

0