【MyBatis】懒加载丶缓存

1. 懒加载

1.1 概述
  • mybatis会先查询自身表的记录,如果后面调用了关联属性,则会调用相应的方法进行查询对关联属性进行封装,如果一直都不调用关联属性,则相应的查询也不会执行
  • 注意toString()方法中即使没有调用关联属性也会默认查询出来,所以测试时可以自定义一个其他方法进行打印对象信息
1.1 在主配置文件中开启对懒加载的支持
<settings>
    <!-- 开启对懒加载的支持 -->
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="aggressiveLazyLoading" value="false"/>
</settings>
1.2 多对一association标签中使用延迟加载
<resultMap id="accountMap" type="account">
    <!-- 使用select属性就可以支持懒加载,mybatis可以控制调用findById方法的时机 -->
    <!-- column属性是给findById的方法参数传值,这里是根据自身的外键列去主表查询记录 -->
    <association  property="user" column="userid"  select="com.dao.IUserDao.findById" ></association>
</resultMap>

<select id="findAll" resultMap="accountMap" >
    select * from account;
</select>
1.3 一对多collection标签中使用延迟加载
<resultMap id="userMap" type="com.domain.User">
    <!-- 因为collection标签的column的值是主键列,导致映射冲突,
    所以必须手动声明id标签,否则映射出来的实体主键属性值为NULL -->
    <id property="id" column="id"></id>
    <!-- 使用select属性就可以支持懒加载,mybatis可以控制调用findByUserid方法的时机 -->
    <!-- column属性是给findByUserid的方法参数传值,这里是根据自身的主键值去从表查询记录 -->
    <collection property="accountList"   column="id"  select="com.dao.IAccountDao.findByUserid"></collection>
</resultMap>

2. 一级缓存

2.1 概述
  • mybatis会对查询结果进行缓存,下次查询同样记录时会自动在缓存中获取,而不会查询数据库
  • 一级缓存是sqlSession级别的缓存,只在同一个session中可用
2.2 缓存清除
  • 关闭数据库连接session.close()
  • 调用清空缓冲方法session.clearCache()
  • 执行了增删改sql语句,不提交事务也会清除缓存
  • 调用了提交事务操作session.commit()

3. 二级缓存

  • 二级缓存是可以跨session访问的
  • 了解即可,一般会用redis代替
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Mybatis懒加载是一种延迟加载的机制,只有在需要使用关联对象时才会进行加载。在Mybatis中,懒加载主要应用于关联查询,通过设置延迟规则,推迟对关联对象的查询,减轻数据库的压力。懒加载只对关联对象有延迟设置,而不会延迟主对象的查询。\[1\] 要开启懒加载,需要在Mybatis的主配置文件中的settings标签中设置lazyLoadingEnabled为true。同时,可以设置aggressiveLazyLoading为false来控制懒加载的行为。\[3\] 需要注意的是,开启懒加载是全局的设置,即对所有关联对象都生效。如果只想对部分关联对象进行懒加载,可以使用association和collection的fetchType属性来覆盖全局的懒加载状态。fetchType属性可以设置为eager表示立即加载,lazy表示使用懒加载。\[3\] 总结来说,Mybatis懒加载是一种延迟加载机制,可以减轻数据库的压力。通过在主配置文件中设置相关属性,可以控制懒加载的行为,包括全局开启懒加载、设置懒加载的延迟规则以及对部分关联对象进行懒加载。\[1\]\[3\] #### 引用[.reference_title] - *1* [Mybatis懒加载](https://blog.csdn.net/qq_52519008/article/details/127118918)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [八、(了解即可)MyBatis懒加载(或者叫延迟加载)](https://blog.csdn.net/a924382407/article/details/130505098)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [MyBatis懒加载](https://blog.csdn.net/layonly/article/details/120719900)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值