mybatis实现多表关联操作
时间: 2023-11-18 14:04:32 浏览: 34
MyBatis可以通过XML映射文件或注解方式来实现多表关联操作,下面是一个简单的示例:
1. 创建实体类
假设有两个表,User和Order,它们之间是一对多的关系,一个用户可以拥有多个订单。我们需要创建对应的实体类User和Order,其中User包含一个List<Order>类型的属性orders,用于存储用户的所有订单。
```
public class User {
private Integer id;
private String name;
private List<Order> orders;
// getter和setter方法
}
public class Order {
private Integer id;
private Integer userId;
private String orderNo;
// getter和setter方法
}
```
2. 创建映射文件
在映射文件中,我们需要定义两个select语句,一个用于查询用户信息,另一个用于查询用户的所有订单。由于这是一对多的关系,我们需要使用resultMap来处理结果集。
```
<!-- 查询用户信息 -->
<select id="getUser" parameterType="int" resultMap="userMap">
select * from user where id = #{id}
</select>
<!-- 查询用户的所有订单 -->
<select id="getOrdersByUserId" parameterType="int" resultMap="orderMap">
select * from order where userId = #{userId}
</select>
<!-- 定义resultMap -->
<resultMap id="userMap" type="User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<collection property="orders" ofType="Order" resultMap="orderMap"/>
</resultMap>
<resultMap id="orderMap" type="Order">
<id property="id" column="id"/>
<result property="userId" column="userId"/>
<result property="orderNo" column="orderNo"/>
</resultMap>
```
3. 编写DAO接口
在DAO接口中定义两个方法,一个用于查询用户信息,另一个用于查询用户的所有订单。
```
public interface UserMapper {
User getUser(int id);
List<Order> getOrdersByUserId(int userId);
}
```
4. 调用方法
最后在代码中调用方法即可完成多表关联查询。
```
User user = userMapper.getUser(1);
List<Order> orders = userMapper.getOrdersByUserId(user.getId());
user.setOrders(orders);
```