一级缓存

是SqlSession级别的缓存,当使用了clearCache方法和,或者close方法的话,这个缓存失效,如果还有同样的查询,则还会发送一次查询

SqlSession session = SqlSessionFactoryUtil.getSession();
Emp emp = session.selectOne("queryEmpByNo", 7900);
System.out.println(emp);
Emp emp2 = session.selectOne("queryEmpByNo", 7900);
System.out.println(emp2);

二级缓存

二级缓存是跨sqlsession的缓存,就是mapper缓存,也就是说,如果前面执行了close方法,后一个SqlSession查询,是可以在SqlSession查询到的,但如果执行了cleaCache方法,则不行

步骤
  1. 需要在mybatis的核心配置文件(mybatis-config.xml)

    <!-- 开启全局二级缓存 -->
    <setting name="cacheEnabled" value="true"/>
  2. 在mapper.xml文件里也要开启缓存

    <!--开启缓存-->
    <cache/>
  3. 实体类要支持序列化,也就是实现Serializable接口

    SqlSession session = SqlSessionFactoryUtil.getSession();
    Emp emp = session.selectOne("queryEmpByNo", 7900);
    System.out.println(emp);
  4. = SqlSessionFactoryUtil.getSession();
    Emp emp2 = session.selectOne("queryEmpByNo", 7900);
    System.out.println(emp2);