java - Mybatis关联查询

查看:102
本文介绍了java - Mybatis关联查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

实际开发中,Mybatis一对多、多对多关联查询是用reultMap引用,javaType引用还是select引用,性能哪个比较好?
用select懒加载,会提高查询速度和性能?

解决方案

mybatis对于处理一对多的情况有三种解决方案:

  1. 查询的时候join子表,然后交由mybatis拼装

  2. 查询的时候不join子表,另外发起select去抓取子表数据

  3. 和第二种类似,只不过利用fetchType=lazy来延缓抓取的时机

这三种方案各有问题:

  1. 第一种方案有两个缺陷:1) 做分页查询的时候不准,2) 如果关联子表多,笛卡尔积会非常大

  2. 第二种方案会出现1+N次查询,发起的sql数量会非常恐怖

  3. 第三种方案看似提升了第一次查询的效率,但是如果在循环里get lazy property,那么和第二种方案没有什么区别

因此如果对性能上有要求, 需要由我们自己去拼装一对多的集合,处理的办法是:把主表的ID都收集起来, 发起一次性查询把所有子表的数据抓取出来,然后人工拼装。这样发起的查询数量就是1+1。

这篇关于java - Mybatis关联查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆