1. mybatis的延迟加载
什么是延迟加载?
在真正使用数据时才发起查询,不用的时候不查询,按需加载(懒加载)。
什么是立即加载?
不管用不用,只要调用方法, 马上发起查询。
如何实现延迟加载?
2. mybatis的缓存
什么是缓存
存在于内存中的临时数据。
为什么使用缓存
减少数据库交互次数,提高执行效率。
什么样的数据能使用缓存,什么样的数据不能使用缓存
适用于缓存:经常查询的并且不经常改变的。 数据的正确与否最终结果影响不大。 例如:商品的库存。
不适用于缓存:经常改变的。 数据的正确与否对最终结果影响很大。例如: 银行的汇率, 股市的牌价。
mybatis的一级缓存和二级缓存
**一级缓存**:它指的是Mybatis中SqlSession对象的缓存。当执行完查询之后,查询的结果会同时存入到SqlSession为我们提供的一块区域中。
该区域的结构是个Map. 当再查询同样的数据,mybatis会先去SqlSession中查询是否有, 有的话直接拿出来用。
同时,当SqlSession对象消失时,mybatis的一级缓存就消失。 调用sqlSession.clearCache();方法
**二级缓存**:它指的是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存。
二级缓存的使用步骤:
第一步: 让mybatis支持二级缓存(在SqlMapConfig.xml中配置)
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
第二步: 让当前的映射文件支持二级缓存(在IUserDao.xml配置)
<!--开始user支持二级缓存-->
<cache/>
第三步: 让当前的操作支持二级缓存(在select 标签中配置)
<select id="findById" parameterType="INT" resultType="user" useCache="true">
SELECT * FROM user WHERE id=#{userId}
</select>
注意: 二级缓存存放的是数据,而不是对象。