06 mybatis一二级缓存

本文将阐述mybatis中的延迟加载。

1、环境约束

  • win10 64位操作系统
  • idea2018.1.5
  • jdk-8u162-windows-x64
  • mybatis3.2.8
  • mysql 6.5

2、前提约束

3、操作步骤

3.1 一级缓存是默认的,所以直接进行一级缓存测试

//关键代码
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//下面这句语句执行的时候,在命令行中打印了sql语句,证明连接了数据库,执行了sql
List<Login> loginList = userMapper.selectLogin();
//下面这句语句执行的时候,在命令行中不会打印sql语句,证明没执行sql,用的是之前的缓存
List<Login> loginList1 = userMapper.selectLogin();

注意,update操作会使得缓存失效,下次查询还会先查询数据库。

3.2 配置和测试二级缓存

  • 在pom.xml中加入依赖
    <dependency>
      <groupId>org.mybatis.caches</groupId>
      <artifactId>mybatis-ehcache</artifactId>
      <version>1.0.3</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.6.4</version>
    </dependency>

  • 修改mybatis-config.xml
    <settings>
        <setting name="cacheEnabled" value="true"></setting>
    </settings>
  • 在UserMapper.xml中增加以下内容
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
  • 在resources文件夹中加入ehcache.xml
<ehcache>
    <diskStore path="D:\cache_test" />
    <defaultCache eternal="false" maxElementsInMemory="1000"
                  timeToIdleSeconds="20" timeToLiveSeconds="20" overflowToDisk="true"
                  maxEntriesLocalDisk="10000000"
                  diskExpiryThreadIntervalSeconds="20" memoryStoreEvictionPolicy="LRU" />
</ehcache>
  • 测试
//关键代码
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//获取session1  
SqlSession session1 = sqlSessionFactory.openSession();  
UserMapper userMapper = session1.getMapper(UserMapper.class);  
User user1 = userMapper.findUserById(1);  
session1.close();  
//获取session2  
SqlSession session2 = sqlSessionFactory.openSession();  
UserMapper userMapper2 = session2.getMapper(UserMapper.class);  
//使用session2执行第二次查询,由于开启了二级缓存这里从缓存中获取数据不再向数据库发出sql  
User user2 = userMapper2.findUserById(1);  
//关闭session2  
session2.close();

注意,update操作会使得二级缓存失效,下次查询还会先查询数据库。
以上就是mybatis中一二级缓存的测试过程。

猜你喜欢

转载自www.cnblogs.com/alichengxuyuan/p/12554771.html