命中条件:
1、sql和参数必须一模一样
private static void test1() throws IOException {
String resource = "mapper/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession session = sqlSessionFactory.openSession()) {
PersonMapper personMapper = session.getMapper(PersonMapper.class);
Person person1 = personMapper.getPersonById("20210420172645864088a2a1ba11eb886d525400146075");
Person person2 = personMapper.getPersonById("20210420172645864088a2a1ba11eb886d525400146075");
System.out.println(person1==person2);
}
}
==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李四, 1, 20, 2021-04-20 17:26:45 <== Total: 1 Cache Hit Ratio [com.laoxu.mybatis.mapper.PersonMapper]: 0.0 true
private static void test1() throws IOException {
String resource = "mapper/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession session = sqlSessionFactory.openSession()) {
PersonMapper personMapper = session.getMapper(PersonMapper.class);
Person person1 = personMapper.getPersonById("20210420172645864088a2a1ba11eb886d525400146075");
Person person2 = personMapper.getPersonById("20210420172922e412b7bea1ba11eb886d525400146075");
System.out.println(person1==person2);
}
}
==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李四, 1, 20, 2021-04-20 17:26:45 <== Total: 1 Cache Hit Ratio [com.laoxu.mybatis.mapper.PersonMapper]: 0.0 ==> Preparing: select * from person where id = ? ==> Parameters: 20210420172922e412b7bea1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172922e412b7bea1ba11eb886d525400146075, 张三, 1, 20, 2021-04-20 17:29:22 <== Total: 1 false
2、statementId必须一样
private static void test1() throws IOException {
String resource = "mapper/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession session = sqlSessionFactory.openSession()) {
PersonMapper personMapper = session.getMapper(PersonMapper.class);
Person person1 = personMapper.getPersonById("20210420172645864088a2a1ba11eb886d525400146075");
Person person2 = personMapper.getPersonById2("20210420172645864088a2a1ba11eb886d525400146075");
System.out.println(person1==person2);
}
}
==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李四, 1, 20, 2021-04-20 17:26:45 <== Total: 1 Cache Hit Ratio [com.laoxu.mybatis.mapper.PersonMapper]: 0.0 ==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李四, 1, 20, 2021-04-20 17:26:45 <== Total: 1 false
3、必须是同一次会话
private static void test2() throws IOException {
String resource = "mapper/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
Person person1;
Person person2;
try (SqlSession session = sqlSessionFactory.openSession()) {
PersonMapper personMapper = session.getMapper(PersonMapper.class);
person1 = personMapper.getPersonById("20210420172645864088a2a1ba11eb886d525400146075");
}
try (SqlSession session = sqlSessionFactory.openSession()) {
PersonMapper personMapper = session.getMapper(PersonMapper.class);
person2 = personMapper.getPersonById2("20210420172645864088a2a1ba11eb886d525400146075");
}
System.out.println(person1==person2);
}
==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李四, 1, 20, 2021-04-20 17:26:45 <== Total: 1 Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@55493582] Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@55493582] Returned connection 1430861186 to pool. false
4、RowBounds返回行范围必须相同
RowBounds对结果集进行分页
private static void test3() throws IOException {
String resource = "mapper/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
Person person1;
Person person2;
try (SqlSession session = sqlSessionFactory.openSession()) {
PersonMapper personMapper = session.getMapper(PersonMapper.class);
RowBounds rowBounds = new RowBounds(0, 10);
person1 = personMapper.getPersonById("20210420172645864088a2a1ba11eb886d525400146075");
List<Person> people = session.selectList(
"com.laoxu.mybatis.mapper.PersonMapper.getPersonById",
"20210420172645864088a2a1ba11eb886d525400146075", rowBounds);
person2 = people.get(0);
System.out.println(person1==person2);
}
}
==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李四, 1, 20, 2021-04-20 17:26:45 <== Total: 1 Cache Hit Ratio [com.laoxu.mybatis.mapper.PersonMapper]: 0.0 ==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李四, 1, 20, 2021-04-20 17:26:45 <== Total: 1 false
private static void test3() throws IOException {
String resource = "mapper/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
Person person1;
Person person2;
try (SqlSession session = sqlSessionFactory.openSession()) {
PersonMapper personMapper = session.getMapper(PersonMapper.class);
// RowBounds rowBounds = new RowBounds(0, 10);
RowBounds rowBounds = RowBounds.DEFAULT;
person1 = personMapper.getPersonById("20210420172645864088a2a1ba11eb886d525400146075");
List<Person> people = session.selectList(
"com.laoxu.mybatis.mapper.PersonMapper.getPersonById",
"20210420172645864088a2a1ba11eb886d525400146075", rowBounds);
person2 = people.get(0);
System.out.println(person1==person2);
}
}
==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李四, 1, 20, 2021-04-20 17:26:45 <== Total: 1 Cache Hit Ratio [com.laoxu.mybatis.mapper.PersonMapper]: 0.0 true
5、没有手动清空缓存
private static void test4() throws IOException {
String resource = "mapper/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
Person person1;
Person person2;
try (SqlSession session = sqlSessionFactory.openSession()) {
PersonMapper personMapper = session.getMapper(PersonMapper.class);
person1 = personMapper.getPersonById("20210420172645864088a2a1ba11eb886d525400146075");
session.clearCache();
person2 = personMapper.getPersonById("20210420172645864088a2a1ba11eb886d525400146075");
System.out.println(person1==person2);
}
}
==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李四, 1, 20, 2021-04-20 17:26:45 <== Total: 1 Cache Hit Ratio [com.laoxu.mybatis.mapper.PersonMapper]: 0.0 ==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李四, 1, 20, 2021-04-20 17:26:45 <== Total: 1 false
6、没有配置执行查询后清空缓存
@Select("select * from person where id = #{id}")
@Options(flushCache = Options.FlushCachePolicy.TRUE)
Person getPersonById3(String id);
private static void test5() throws IOException {
String resource = "mapper/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
Person person1;
Person person2;
try (SqlSession session = sqlSessionFactory.openSession()) {
PersonMapper personMapper = session.getMapper(PersonMapper.class);
person1 = personMapper.getPersonById3("20210420172645864088a2a1ba11eb886d525400146075");
person2 = personMapper.getPersonById3("20210420172645864088a2a1ba11eb886d525400146075");
System.out.println(person1==person2);
}
}
==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李四, 1, 20, 2021-04-20 17:26:45 <== Total: 1 ==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李四, 1, 20, 2021-04-20 17:26:45 <== Total: 1 false
private static void test6() throws IOException {
String resource = "mapper/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
Person person1;
Person person2;
try (SqlSession session = sqlSessionFactory.openSession()) {
PersonMapper personMapper = session.getMapper(PersonMapper.class);
person1 = personMapper.getPersonById("20210420172645864088a2a1ba11eb886d525400146075");
personMapper.getPersonById3("20210420172645864088a2a1ba11eb886d525400146075");
person2 = personMapper.getPersonById("20210420172645864088a2a1ba11eb886d525400146075");
System.out.println(person1==person2);
}
}
==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李四, 1, 20, 2021-04-20 17:26:45 <== Total: 1 ==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李四, 1, 20, 2021-04-20 17:26:45 <== Total: 1 Cache Hit Ratio [com.laoxu.mybatis.mapper.PersonMapper]: 0.0 ==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李四, 1, 20, 2021-04-20 17:26:45 <== Total: 1 false
7、没有执行update
private static void test7() throws IOException {
String resource = "mapper/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
Person person1;
Person person2;
try (SqlSession session = sqlSessionFactory.openSession()) {
PersonMapper personMapper = session.getMapper(PersonMapper.class);
person1 = personMapper.getPersonById("20210420172645864088a2a1ba11eb886d525400146075");
personMapper.updatePersonNameById("20210420172645864088a2a1ba11eb886d525400146075", "李大爷");
session.commit();
person2 = personMapper.getPersonById("20210420172645864088a2a1ba11eb886d525400146075");
System.out.println(person1==person2);
}
}
==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李四, 1, 20, 2021-04-20 17:26:45 <== Total: 1 ==> Preparing: update person set `name` = ? where id = ? ==> Parameters: 李大爷(String), 20210420172645864088a2a1ba11eb886d525400146075(String) <== Updates: 1 Cache Hit Ratio [com.laoxu.mybatis.mapper.PersonMapper]: 0.0 ==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李大爷, 1, 20, 2021-04-20 17:26:45 <== Total: 1 false
8、缓存的作用域不能是STATEMENT
配置localCacheScope值为STATEMENT
<?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>
<properties resource="config.properties">
<!-- 按需定义全局变量,以供整个配置文件使用-->
<!-- <property name="globalVariable" value="value"/>-->
</properties>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING" />
<setting name="localCacheScope" value="STATEMENT" />
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/PersonMapper.xml"/>
</mappers>
</configuration>
private static void test8() throws IOException {
String resource = "mapper/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
Person person1;
Person person2;
try (SqlSession session = sqlSessionFactory.openSession()) {
PersonMapper personMapper = session.getMapper(PersonMapper.class);
person1 = personMapper.getPersonById("20210420172645864088a2a1ba11eb886d525400146075");
person2 = personMapper.getPersonById("20210420172645864088a2a1ba11eb886d525400146075");
System.out.println(person1==person2);
}
}
==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李四, 1, 20, 2021-04-20 17:26:45 <== Total: 1 Cache Hit Ratio [com.laoxu.mybatis.mapper.PersonMapper]: 0.0 ==> Preparing: select * from person where id = ? ==> Parameters: 20210420172645864088a2a1ba11eb886d525400146075(String) <== Columns: id, name, sex, age, create_time <== Row: 20210420172645864088a2a1ba11eb886d525400146075, 李四, 1, 20, 2021-04-20 17:26:45 <== Total: 1 false