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提供了以下几种方法查询父子表并合并结果:
- 一对多关联查询
- 嵌套查询
- 使用BaseRowMapper
- 自定义RowMapper