mysql 迟加载_MyBatis: 一对一和一对多的延迟加载

在一对一和一对多的实现 我们了解了 mybatis 如何实现一对一和一对多,它的实现方案是通过写一个SQL取出两张表结合在一起的所有数据,然后mybatis稍作处理进行返回。还有一种实现方案是,写两个单独的 SQL ,通过id等业务字段进行关联,然后分别执行,得到最终结果。这种方案,还有一个优势,就是支持延迟加载。

数据准备

user表和blog表的默认内容如下:

项目结构

使用 IDEA 创建 gradle 项目,最终结构如下:

46704a1304963b791ed4a93ef5d70a0b.png

根据id查询博客及其所属用户信息

在 BlogMapper 接口中新增方法:

在 BlogMapper.xml 中增加映射:

findById 方法是和 对应的。 的SQL 只是从 blog表中读取数据,它的resultMap属性值是blogResult,对应。而中的使用了select和column属性:

selecct对应的值是findOwnerOfBlog,意思是找,column的值是user_id,意思是将user_id 的值传到中。

在 Main 类中编写示例代码:

执行结果:

可以看到两个SQL依次执行。

如何设置延迟加载

上面的示例中,在我们未获取 user 信息时,就已经把user信息取出来了。如何做到,用到再加载,也就是延迟加载呢?

很简单,在 mybatis-config.xml 加入:

再次执行上面的示例代码,结果是:

注意,INFO [main] - id:1, title:标题1, content:文本1和INFO [main] - user: User(id=1, name=letian, email=letian@111.com, password=123, blogs=null)之间,mybatis输出了查找用户信息的日志,这就是延迟加载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值