MyBatis Plus查询父子表结果合并的方法是什么?

Mybatis Plus提供了以下几种方法查询父子表结果并合并:

1. 通过关联查询

直接使用一对多或者多对一的关联查询:

List<User> list = userMapper.selectList(null);

// User 中定义    
@OneToMany
private List<Order> orders;

// 会自动查询orders表,并设置到User.orders中 

这种方式最简单,但会产生N+1查询问题。

2. 通过嵌套查询

List<User> list = userMapper.selectNestedList();

// 映射文件中  
<resultMap> 
   <collection property="orders" column="id" javaType="List" 
       ofType="com.itzhimei.poco.Order">
   </collection>   
</resultMap>

使用嵌套查询,一次性查询完成。

3. BaseRowMapper

使用BaseRowMapper的assemble方法:

List<User> users= BaseRowMapper.instance.map(userResult);
List<Order> orders = BaseRowMapper.instance.map(orderResult);

List<Object> result = BaseRowMapper.instance.assemble(users,orders);

将两个结果集合并为一个List。

4. 自定义RowMapper

实现RowMapper接口,自己处理分表结果:

List<User> users = userMapper.selectList(..);
List<Order> orders = orderMapper.selectList(..);

List<Object> result = BaseRowMapper.instance.map(userResult, new RowMapper<Object>(){ 
   public Object mapRow() {
      // 处理user和order数据,封装为一个结果  
   }
});

总的来说,Mybatis Plus提供了以下几种方法查询父子表并合并结果:

  1. 一对多关联查询
  2. 嵌套查询
  3. 使用BaseRowMapper
  4. 自定义RowMapper