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">
<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">
<id property="id" column="id"></id>
<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代替