关于缓存的测试
<?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 + "]"; } }