日常业务逻辑中,经常出现类似以下场景:
查询数据库A表,返回数据列表List<A>
列表中的A元素中,含List<B>字段(List<B>数据来自数据库B表)
基本查询方法(常用):
查询List<A>
循环List<A>
循环嵌套查询List<B>
List<B>结果存入List<A>
Mybatis嵌套查询方法(推荐):
假设:
已有a表,表中含有字段bid,对应b表字段id
a表对应实体类:A(id,name,bid)
b表对应实体类:B(id,name)
实现步骤:
编写查询A表xml:
编写步骤1中的resultMap:
上图效果:将getAListResult返回结果中元素的bid字段取出,作为id字段筛选值传入getBList方法,并将返回结果存入getAListResult中对应元素的bList字段,实现类循环嵌套查询效果
实际并非完全循环外层List<A>,如:外层List<A>中共有10条返回结果,且前5条的bid都为1,后5条的bid都为2,则内层循环只会执行两次查询(同一个条件只会执行一次),即b.id=1及b.id=2各执行一次查询,而不是循环执行10次查询
编写步骤2中<collection>标签中的select方法:
BMapper:
mapper.xml:
完成~