一,mybatis的延迟加载
1,延迟加载
在真正使用数据的时候才发起查询,不用的时候不查询,按需加载(懒加载)
2,立即加载
不管用不用,只要一调用,马上发起查询。
3,四种表关系
一对一,多对一:采用立即加载。
一对多,多对多:懒加载。
二,mybatis的缓存
1,什么是缓存
存在于内存中的临时数据
2,为什么使用缓存
减少和数据库的交互次数,提高执行效率。
3,什么样的数据使用缓存
使用于缓存:
经常查询且不经常改变的。
数据的正确与否最终的结果影响不大
不适用于缓存:
经常改变的数据
数据的正确与否对数据的影响很大
4,Mybatis中的一级缓存:
指的是mybatis中的SqlSession对象的缓存
当执行查询后,查询的结果会同时存入到SqlSession为我们提供的一块区域中。
该区域的结构是一个Map,当我们再次查询同样的数据,mybatis会先去SqlSession中查询是否有,有直接拿出来使用。
当SqlSession对象消失时,mybatis的一级缓存也就消失了。
注意:1,一级缓存:使用的是同一个对象
2,SqlSession范围的缓存,当调用SqlSession的修改,添加,删除,commit(),close()等方法时,就会清空一级缓存
<!-- mybatis开启支持延迟加载 --> <setting name="lazyLoadingEnabled" value="true"/> </settings>
<mapper namespace="com.dao.Load"> <!-- 定义account和user的resultMap --> <resultMap type="account" id="accountUserMap"> <id property="id" column="id"></id> <result property="uid" column="user_id" ></result> <result property="money" column="money" ></result> <!-- --> <association property="user" column="user_id" javaType="user" select="com.dao.IUserDao.findById"> </association> </resultMap> <!-- 一对一,或者多对一 配置查询所有 --> <select id="findAll" resultMap="accountUserMap"> select * from my_account; </select> </mapper>
5,二级缓存
5.1定义:指的是Mybatis中SqlSessionFactory对象的缓存,有同一个SqlSessionFactory对象创建的
SqlSession共享其缓存
5.2步骤:
第一步:让mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)
<settings> <!-- mybatis开启二级缓存 --> <setting name="cacheEnabled" value="true"/> </settings>
第二部:让当前的映射文件支持二级缓存(在当前的映射文件中配置)
<!-- 开启二级缓存 --> <cache/>
第三步:让当前的操作支持二级缓存(在select标签中配置)
<select id="findAll" resultMap="accountUserMap" useCache="true"> select * from my_account; </select>
5.3:注意:二级缓存中存放的是数据不是对象。实际:访问二级缓存时是获取对象的数据,创建一个对象。
三,mybatis中的注解开发
原文:https://www.cnblogs.com/gjx1212/p/14705158.html