Mybatis对于处理一对多的状况有三种解决方案:sql
查询的时候join子表,而后交由mybatis拼装mybatis
查询的时候不join子表,另外发起select去抓取子表数据性能
和第二种相似,只不过利用fetchType=lazy
来延缓抓取的时机fetch
这三种方案各有问题:code
第一种方案有两个缺陷:1) 作分页查询的时候不许,2) 若是关联子表多,笛卡尔积会很是大get
第二种方案会出现1+N次查询,发起的sql数量会很是恐怖效率
第三种方案看似提高了第一次查询的效率,可是若是在循环里get lazy property,那么和第二种方案没有什么区别select
所以若是对性能上有要求, 须要由咱们本身去拼装一对多的集合,处理的办法是:把主表的ID都收集起来, 发起一次性查询把全部子表的数据抓取出来,而后人工拼装。这样发起的查询数量就是1+1。循环