先看《Mybatis一级缓存》,我们在这个基础上进行改动。
1、实体类
需要实现Serializable接口,如下:
import java.io.Serializable;
public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = 8185639262148105029L;
private int id;
private String name;
private int age;
public User() {
}
public User(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
二、userMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test9.userMapper">
<cache/>
<select id="getUser" parameterType="int" resultType="_CUser">
select * from c_user where id=#{id}
</select>
<update id="updateUser" parameterType="_CUser">
update c_user set name=#{name}, age=#{age} where id=#{id}
</update>
</mapper>
<cache/>加上就可以了。
三、测试类
import java.io.IOException;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import com.util.MybatisUtils;
public class Test9 {
/*
* 测试二级缓存
*/
@Test
public void testCache2() throws IOException {
SqlSessionFactory factory = MybatisUtils.getSessionFactory("conf.xml");
SqlSession session = factory.openSession();
String statement = "com.test9.userMapper.getUser";
User user = session.selectOne(statement, 1);
session.commit(); // 必须要提交才能缓存到二级缓存
System.out.println("user=" + user);
// 新session,也能使用缓存
SqlSession session2 = factory.openSession();
user = session2.selectOne(statement, 1);
session.commit();
System.out.println("user2=" + user);
}
}
2015-05-09 17:58:41,640 [main] DEBUG [com.test9.userMapper.getUser] - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@18b3e62]
2015-05-09 17:58:41,640 [main] DEBUG [com.test9.userMapper.getUser] - ==> Preparing: select * from c_user where id=?
2015-05-09 17:58:41,687 [main] DEBUG [com.test9.userMapper.getUser] - ==> Parameters: 1(Integer)
user=User [id=1, name=Tom, age=12]
user2=User [id=1, name=Tom, age=12]
可以看到二级缓存生效了。