一、mybatis的一级缓存
mybatis默认打开一级缓存
实例:
CUser.java
package com.lx.bean;
import java.io.Serializable;
public class CUser implements Serializable{
private int id;
private String name;
private int age;
public CUser() {
}
public CUser(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 + "]";
}
}
数据表:
CREATE TABLE c_user(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
age INT
);
INSERT INTO c_user(NAME, age) VALUES('Tom', 12);
INSERT INTO c_user(NAME, age) VALUES('Jack', 11);
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.lx.test8.userMapper">
<!-- 二级缓存 -->
<cache></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>
测试类:
package com.lx.test8;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import com.lx.bean.CUser;
import com.lx.utils.FactoryUtil;
public class Test8 {
/**
* 一级缓存
* 清除缓存的方法
* 1.session.clearCache();
* 2.增删改查操作
* 3.重新开启一个session
* 二级缓存
* <cache></cache>
*/
@Test
public void testCaheOne()
{
SqlSessionFactory factory = FactoryUtil.getFactory();
SqlSession session = factory.openSession();
String statement = "com.lx.test8.userMapper.getUser";
CUser user = session.selectOne(statement, 1);
System.out.println(user);
System.out.println("=================");
//1、session.clearCache();
//2.CRUD操作
/*statement = "com.lx.test8.userMapper.updateUser";
session.update(statement, new CUser(1,"Tom",20));
session.commit();
statement = "com.lx.test8.userMapper.getUser";*/
session.close();
session = factory.openSession();
user = session.selectOne(statement, 1);
System.out.println(user);
session.close();
}
@Test
public void testCaheTwo()
{
SqlSessionFactory factory = FactoryUtil.getFactory();
SqlSession session1 = factory.openSession();
SqlSession session2 = factory.openSession();
String statement = "com.lx.test8.userMapper.getUser";
CUser user = session1.selectOne(statement, 1);
session1.commit();
System.out.println(user);
user = session2.selectOne(statement, 1);
System.out.println(user);
}
}
二、mybatis的二级缓存
直接在映射文件中添加cache标签
将CUser序列化。