在 MyBatis 中,你可以编写连表查询的 SQL 语句,然后在映射文件中定义这个查询。以下是一个简单的示例,展示了如何在 MyBatis 中编写连表查询的 SQL 语句。
首先,假设我们有两个数据库表:user
和 order
,它们之间的关系是一个用户可以有多个订单。
-- 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)
);
接下来,我们在 MyBatis 的映射文件中编写连表查询的 SQL 语句。假设我们要查询每个用户及其对应的订单信息。
<!-- 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>
在上面的示例中,我们首先定义了一个名为 UserOrderResultMap
的结果映射,它将查询结果映射到 UserOrder
类。然后,我们编写了一个名为 getUserOrders
的查询,它使用 LEFT JOIN
从 user
和 order
表中获取数据。
最后,我们需要创建一个接口,用于与映射文件关联。
// UserOrderMapper.java
package com.example.mapper;
import com.example.model.UserOrder;
import java.util.List;
public interface UserOrderMapper {
List<UserOrder> getUserOrders();
}
现在,你可以在你的业务逻辑中调用 getUserOrders
方法来执行连表查询。