缓存
1xml配置开启二级缓存
注意:开启缓存需要在核心配置文件中配置
<settings> <setting name="cacheEnabled" value="true"/> </settings>
如果使用的是xml配置sql的方式,那么必须在mapperxml中配置标签
2 注解方式开启二级缓存
1 核心配置文件开启配置
2 接口类上加入注解
@CacheNamespace(blocking = true) public interface UserDao {
注意:二级缓存的时候必须在最后关闭session,也就是清理一级缓存
二次缓存查询案例
二次缓存是失去factory级别的
@Test public void cache2() throws IOException { InputStream stream = Resources.getResourceAsStream("mybatis.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream); SqlSession sqlSession = factory.openSession(); StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); Student student = mapper.one(); System.out.println(student); sqlSession.close(); SqlSession sqlSession2= factory.openSession(); StudentMapper mapper2 = sqlSession2.getMapper(StudentMapper.class); Student student2 = mapper2.one(); System.out.println(student2); }
11延迟加载
cglib cglib 3.1 org.ow2.asm asm 4.2 ``` ```
延迟加载必须导入两个包
- 在一对多的地方开启延迟加载,开启的地方可以选择全局开启,还是针对某个方法
==全局开机== >```xml ><!-- 开启懒加载配置 --> ><settings> > <!-- 全局性设置懒加载。如果设为‘false',则所有相关联的都会被初始化加载。 --> > <setting name="lazyLoadingEnabled" value="true"/> > <!-- 当设置为‘true'的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。 --> > <setting name="aggressiveLazyLoading" value="false"/> ></settings> >``` ==局部开启== ```xml --在对应的一对多查询的地方collection开启 <collection property="teachers" ofType="teacher" column="id" select="cn.laixueit.mapper.TeacherMapper.teachers" fetchType="lazy"> </collection>
注解开启,在需要进行懒加载的地方添加属性fetchType=fetchType=lazy