在 Java 中,使用 MyBatis 進行關聯查詢可以通過以下幾個步驟實現:
首先,為需要進行關聯查詢的數據庫表創建對應的實體類。例如,假設我們有兩個表:user
和 order
,我們需要查詢每個用戶及其對應的訂單信息。
public class User {
private int id;
private String name;
private List<Order> orders;
// 省略 getter 和 setter 方法
}
public class Order {
private int id;
private String orderNumber;
private int userId;
// 省略 getter 和 setter 方法
}
接下來,為每個實體類創建一個映射文件,用于定義 SQL 查詢語句和結果映射。
UserMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
<resultMap id="UserResultMap" type="User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<collection property="orders" ofType="Order" column="id" select="com.example.mapper.OrderMapper.selectOrdersByUserId"/>
</resultMap>
<select id="selectUsersWithOrders" resultMap="UserResultMap">
SELECT * FROM user
</select>
</mapper>
OrderMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.OrderMapper">
<resultMap id="OrderResultMap" type="Order">
<id property="id" column="id"/>
<result property="orderNumber" column="order_number"/>
<result property="userId" column="user_id"/>
</resultMap>
<select id="selectOrdersByUserId" resultMap="OrderResultMap">
SELECT * FROM `order` WHERE user_id = #{userId}
</select>
</mapper>
接下來,為每個映射文件創建一個對應的接口。
UserMapper.java:
package com.example.mapper;
import java.util.List;
import com.example.entity.User;
public interface UserMapper {
List<User> selectUsersWithOrders();
}
OrderMapper.java:
package com.example.mapper;
import java.util.List;
import com.example.entity.Order;
public interface OrderMapper {
List<Order> selectOrdersByUserId(int userId);
}
在 MyBatis 的配置文件(如:mybatis-config.xml)中,注冊剛剛創建的映射文件和接口。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
<mapper resource="com/example/mapper/OrderMapper.xml"/>
</mappers>
</configuration>
最后,在你的業務代碼中,使用 MyBatis 提供的 SqlSession
或者 Spring 集成的 SqlSessionTemplate
來調用映射接口中的方法,進行關聯查詢。
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> usersWithOrders = userMapper.selectUsersWithOrders();
// 處理查詢結果
}
這樣,你就可以使用 MyBatis 實現關聯查詢了。注意,這里的示例僅用于演示目的,實際項目中可能需要根據具體需求進行調整。