文章目录
缓存
官方文档:
1、简介
1 什么是缓存 [ Cache ]?
- 存在内存中的临时数据。
- 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。
2 为什么使用缓存?
- 减少和数据库的交互次数,减少系统开销,提高系统效率。
3 什么样的数据能使用缓存?
- 经常查询并且不经常改变的数据。
2、Mybatis缓存
- MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地定制和配置缓存。缓存可以极大的提升查询效率。
- MyBatis系统中默认定义了两级缓存:一级缓存和二级缓存
- 默认情况下,只有一级缓存开启。(SqlSession级别的缓存,也称为本地缓存)
- 二级缓存需要手动开启和配置,他是基于namespace级别的缓存。
- 为了提高扩展性,MyBatis定义了缓存接口Cache。我们可以通过实现Cache接口来自定义二级缓存。
3、一级缓存
一级缓存也叫本地缓存:
- 与数据库同一次会话期间查询到的数据会放在本地缓存中。
- 以后如果需要获取相同的数据,直接从缓存中拿,没必须再去查询数据库。
3.1 初体验测试
-
在mybatis中加入日志,方便查看测试结果。
-
实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
private int id;
private String name;
private String pwd;
}
注意:在开发中,尽量将实体类序列化,防止报错。
- 编写接口方法UserMapper.java
public interface UserMapper {
User queryUserById(@Param("id") int id);
int updateUser(User user);
}
- 接口对应的UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxc.dao.UserMapper">
<select id="queryUserById" resultType="user">
select * from user where id = #{id};
</select>
<update id="updateUser" parameterType="user">
update user set name = #{name},pwd = #{pwd} where id = #{id};
</update>
</mapper>
- 测试
public class MyTest {
static Logger logger = Logger.getLogger(MyTest.class);
@Test
public void queryUserById(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user1 = mapper.queryUserById(1);
logger.debug(user1);
System.out.println("=========================");
User user2 = mapper.queryUserById(1);
logger.debug(user2);
System.out.println(user1==user2);
sqlSession.close();
}
}