本实例是基于maven的项目。
(1)需要添加的maven依赖
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis/spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
(2)在Mybatis的配置文件(mybatis.xml)中开启缓存功能
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 全局映射器启用缓存 -->
<setting name="cacheEnabled" value="true" />
</settings>
</configuration>
(3)在需要开启缓存功能的mapper文件中添加缓存
<!--添加缓存-->
<cache
eviction="LRU"
flushInterval="60000"
size="1024"
readOnly="true"
/>
(4)进行单元测试
@Test
public void findUser() throws Exception {
logger.debug("the user is "+userMapper.getUsersByName("zhangfei"));
logger.debug("the user is "+userMapper.getUsersByName("zhangfei"));
// userMapper.updateUser(new User("张三丰",11,"zsf123",1));
}
(5)输出结果
2017-05-12 15:35:24.904 [main] WARN net.sf.ehcache.config.ConfigurationFactory - No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath: jar:file:/E:/maven/net/sf/ehcache/ehcache/2.10.1/ehcache-2.10.1.jar!/ehcache-failsafe.xml
2017-05-12 15:35:25.669 [main] DEBUG org.mybatis.spring.SqlSessionFactoryBean - Scanned package: 'com.hongtu.entity' for aliases
2017-05-12 15:35:25.692 [main] DEBUG org.mybatis.spring.SqlSessionFactoryBean - Parsed configuration file: 'class path resource [conf/mybatis.xml]'
2017-05-12 15:35:25.732 [main] DEBUG org.mybatis.spring.SqlSessionFactoryBean - Parsed mapper file: 'file [E:\MySelf\SpringDemo_hongtu_01\target\classes\mapper\UserMapper.xml]'
2017-05-12 15:35:26.984 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession
2017-05-12 15:35:27.000 [main] DEBUG org.mybatis.spring.SqlSessionUtils - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@bcfe29c] was not registered for synchronization because synchronization is not active
2017-05-12 15:35:27.000 [main] DEBUG org.mybatis.spring.transaction.SpringManagedTransaction - JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@38f981b6] will not be managed by Spring
2017-05-12 15:35:27.000 [main] DEBUG com.hongtu.mapper.UserMapper.getUsersByName - ooo Using Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@38f981b6]
2017-05-12 15:35:27.000 [main] DEBUG com.hongtu.mapper.UserMapper.getUsersByName - ==> Preparing: select * from user where name=?;
2017-05-12 15:35:27.031 [main] DEBUG com.hongtu.mapper.UserMapper.getUsersByName - ==> Parameters: zhangfei(String)
2017-05-12 15:35:27.047 [main] DEBUG com.hongtu.mapper.UserMapper.getUsersByName - <== Total: 0
2017-05-12 15:35:27.047 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@bcfe29c]
2017-05-12 15:35:27.047 [main] DEBUG com.hongtu.test.TestUser - the user is null
2017-05-12 15:35:27.047 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession
2017-05-12 15:35:27.047 [main] DEBUG org.mybatis.spring.SqlSessionUtils - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@60194904] was not registered for synchronization because synchronization is not active
2017-05-12 15:35:27.047 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@60194904]
2017-05-12 15:35:27.047 [main] DEBUG com.hongtu.test.TestUser - the user is null
由以上可以看出,执行了两次查询,但是最终只与数据库交互了一次。
注意:如果如果在一个mapper文件中,针对某些查询我们不想要缓存,仅仅需要将useCache设置成false即可。
具体代码参考gitHub地址:mybatis二级缓存使用