准备工作:
新建一个项目:复制这三个文件。并且再pom.xml中导入lombox的环境。
再pojo中新建一个实体类User
- package com.Li.pojo;
-
- import lombok.Data;
-
- @Data
- public class User {
- private int id;
- private String name;
- private String pwd;
- }
修改config.xml配置的mapper
开始:
创建这三个文件。
Mapper:
- package com.Li.dao;
-
- import com.Li.pojo.User;
- import org.apache.ibatis.annotations.Param;
-
- public interface UserMapper {
-
- //根据ID查询用户
- User queryUserById(@Param("id") int id);
-
- }
Mapper.xml
- "1.0" encoding="UTF-8" ?>
- mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.Li.dao.UserMapper">
-
- <select id="queryUserById" resultType="user">
- select * from user where id = #{id}
- select>
- mapper>
这里为什么是user
因为开启了别名映射,否则要写完整路径
Test:
- import com.Li.dao.UserMapper;
- import com.Li.pojo.User;
- import com.Li.utils.MybatisUtils;
- import org.apache.ibatis.session.SqlSession;
- import org.junit.Test;
-
- public class MyTest {
-
- @Test
- public void queryUserById(){
- SqlSession sqlSession = MybatisUtils.getSqlSession();
- UserMapper mapper = sqlSession.getMapper(UserMapper.class);
-
- User user = mapper.queryUserById(1);
- System.out.println(user);
-
- System.out.println("=========================================");
-
- User user2 = mapper.queryUserById(1);
- System.out.println(user2);
-
- System.out.println(user == user2);
-
- sqlSession.close();
- }
- }
测试之后:
sql只走了一遍。说明是有缓存的,并没有从数据库中查询两次。
增删改都需要清理缓存。因为增删改之后,数据会变,所以会清理缓存。而查询的时候数据不会变,所以还保留。
手动清理缓存:(加了这段话之后,可以发现结果查询了两次数据库)
步骤:
1. 开启全局缓存(二级缓存)
2.开启缓存(只写一个cache标签也可以,下面的是官方标准的写法)
-
- <cache eviction="FIFO"
- flushInterval="60000"
- size="512"
- readOnly="true"/>
3.Test文件
- @Test
- public void test2(){
- SqlSession session = MybatisUtils.getSqlSession();
- SqlSession session2 = MybatisUtils.getSqlSession();
-
- UserMapper mapper = session.getMapper(UserMapper.class);
- UserMapper mapper2 = session2.getMapper(UserMapper.class);
-
- User user = mapper.queryUserById(1);
- System.out.println(user);
- session.close();
-
- User user2 = mapper2.queryUserById(1);
- System.out.println(user2);
-
- System.out.println(user==user2);
-
- session2.close();
- }
结果:
说明已经开启了二级缓存。即使是两个不同的session也可以快速使用。
了解即可。
现在一般都是用redis数据库来做缓存。
实现的话,就是在Mapper.xml中配置一个cache标签,自定义名字。之后配置一个resouce文件就可以了。
不怎么关键,了解即可。