mybatis的延迟加载
什么延迟加载
什么是立即加载
如果实现
mybatis的缓存
什么是缓存
为什么使用缓存
什么样的数据可以使用缓存 什么样的数据不能使用
mbatis一级缓存 二级缓存
mybatis中的延迟加载
问题:在一对多,我们有一个用户,它有100个账户
查询用户的时候,关联的账户是否查询出来
查询账户,要不要把关联的用户查出来
在查询用户时,用户下的账户信息应该是,什么时候使用,什么时候查询的
在查询账户时,账户的所属用户信息应该是随着账户查询一起查询出来
延迟加载:符合第一种,真正使用数据的时候才查询,不用的时候不查询,也叫按需加载 ,也叫懒加载
立即加载:不管用不用,只要一调用方法,马上发起查询
在对应的四种表关系
一对多 多对一 一对一 多对多
根据关联的对象分为一与多
分成
多对一 一对一 通常情况,我们都是立即加载
一对多 多对多 通常情况,我们都是采用延迟下载
select属性指定的内容,查询用户唯一的标识
select里面是用户如何查询用户的
原来iaccountdao
缓存
存在于内存临时数据
为什么使用缓存
减少和数据库交互次数,提高执行效率
![](/qrcode.jpg)
适用于缓存的数据,经常查询的并且不常改变的
数据的正确与否对最终结果影响不大
不适用于缓存,经常改变的数据,数据的正确与否对数据影响很大
商品的库存,银行的汇率,股市的牌价
mybatis 一级缓存
指定的mysql 中sqlsession对象的缓存
当我们执行查询之后,查询的结果会同时存入到sqlsession提供的区域中
该区域结构是一个map
当我们再次查询同样的数据,mybatis会先去sqlsession是否有
有的话,直接取出调用
当sqlsession对象消失时,mybatis一级缓存也就没了
sqlseesion.close()
sqlsession.clearCache() 此方法也可以清空缓存
一级缓存是 SqlSession 范围的缓存,当调用 SqlSession 的修改,添加,删除,commit(),close()等
二级缓存
它指的是mybatis中sqlsessionFactory对象的缓存,由同一个sqlsessionFactory对象创建的sqlsession共享其缓存
二级缓存步骤
第一步:mybatis支持二级缓存 在sqlmapconfig
第二步:让当前映射文件支持二级缓存 IUserDAo
第三步:让当前的操作支持二级缓存
<cache>
再在select查询中,添加属性 useCache = true
二级缓存存放的是数据,而不是对象