In der tatsächlichen Entwicklung verwenden Mybatis Eins-zu-Viele- und Viele-zu-Viele-bezogene Abfragen die reultMap-Referenz, die JavaType-Referenz oder die ausgewählte Referenz. Welche hat eine bessere Leistung?
Wird Lazy Loading mit Select die Abfragegeschwindigkeit und -leistung verbessern?
mybatis对于处理一对多的情况有三种解决方案:
查询的时候join子表,然后交由mybatis拼装
查询的时候不join子表,另外发起select去抓取子表数据
和第二种类似,只不过利用
fetchType=lazy
来延缓抓取的时机这三种方案各有问题:
第一种方案有两个缺陷:1) 做分页查询的时候不准,2) 如果关联子表多,笛卡尔积会非常大
第二种方案会出现1+N次查询,发起的sql数量会非常恐怖
第三种方案看似提升了第一次查询的效率,但是如果在循环里get lazy property,那么和第二种方案没有什么区别
因此如果对性能上有要求, 需要由我们自己去拼装一对多的集合,处理的办法是:把主表的ID都收集起来, 发起一次性查询把所有子表的数据抓取出来,然后人工拼装。这样发起的查询数量就是1+1。