关于缓存的测试
<?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.hous.day8.userMapper"> <!-- 开启二级缓存 --> <cache></cache> <select id="getUser" parameterType="int" resultType="com.hous.day8.User"> select * from users where id=#{id} </select> <update id="updateUser" parameterType="com.hous.day8.User"> update users set name=#{name},age=#{age} where id=#{id} </update> </mapper>
<?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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <mappers> <mapper resource="com/hous/day8/userMapper.xml" /> </mappers> </configuration>
package com.hous.day8;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
/**
* 测试缓存
* 1.一级缓存:session级缓存
* 1)使用session.clearCache()清除缓存
* 2)执行cud操作清除缓存
* 3)使用不同的session
*
* 2.二级缓存:映射文件级缓存
*
*/
public class MyTest {
private SqlSessionFactory factory = null;
@Before
public void setUp() throws Exception {
String resource = "day8/config.xml";
InputStream config = MyTest.class.getClassLoader().getResourceAsStream(resource);
factory = new SqlSessionFactoryBuilder().build(config);
}
@Test
public void testCacheOne() {
SqlSession session = factory.openSession();
String statement = "com.hous.day8.userMapper.getUser";
User user = session.selectOne(statement, 3);
System.out.println("查询结果:" + user);
System.out.println("====================");
//第一种情况:使用session.clearCache()清除缓存
// session.clearCache();
// user = session.selectOne(statement, 3);
// System.out.println("查询结果:" + user);
//第二种情况:执行cud操作清除缓存
// String updateStatement = "com.hous.day8.userMapper.updateUser";
// session.update(updateStatement, new User(12,"genyang", new Random().nextInt(200)));
// session.commit();
// user = session.selectOne(statement, 3);
// System.out.println("查询结果:" + user);
//第三种情况:关闭session.close()
session.close();
user = session.selectOne(statement, 3);
System.out.println("查询结果:" + user);
}
@Test
public void testCacheTwo() {
SqlSession session1 = factory.openSession();
SqlSession session2 = factory.openSession();
String statement = "com.hous.day8.userMapper.getUser";
User user = session1.selectOne(statement, 3);
session1.commit();
System.out.println("查询结果:" + user);
System.out.println("====================");
user = session2.selectOne(statement, 3);
session2.commit();
System.out.println("查询结果:" + user);
}
}
package com.hous.day8;
import java.io.Serializable;
public class User implements Serializable{
private static final long serialVersionUID = 1L;
private int id;
private String name;
private int age;
public User() {
super();
}
public User(int id, String name, int age) {
super();
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 + "]";
}
}