• 缓存P27,28,29


    一级缓存:

    准备工作:

    新建一个项目:复制这三个文件。并且再pom.xml中导入lombox的环境。

    再pojo中新建一个实体类User

    1. package com.Li.pojo;
    2. import lombok.Data;
    3. @Data
    4. public class User {
    5. private int id;
    6. private String name;
    7. private String pwd;
    8. }

     修改config.xml配置的mapper


    开始:

    创建这三个文件。

    Mapper:

    1. package com.Li.dao;
    2. import com.Li.pojo.User;
    3. import org.apache.ibatis.annotations.Param;
    4. public interface UserMapper {
    5. //根据ID查询用户
    6. User queryUserById(@Param("id") int id);
    7. }

    Mapper.xml

    1. "1.0" encoding="UTF-8" ?>
    2. mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="com.Li.dao.UserMapper">
    6. <select id="queryUserById" resultType="user">
    7. select * from user where id = #{id}
    8. select>
    9. mapper>

    这里为什么是user

    因为开启了别名映射,否则要写完整路径

    Test:

    1. import com.Li.dao.UserMapper;
    2. import com.Li.pojo.User;
    3. import com.Li.utils.MybatisUtils;
    4. import org.apache.ibatis.session.SqlSession;
    5. import org.junit.Test;
    6. public class MyTest {
    7. @Test
    8. public void queryUserById(){
    9. SqlSession sqlSession = MybatisUtils.getSqlSession();
    10. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    11. User user = mapper.queryUserById(1);
    12. System.out.println(user);
    13. System.out.println("=========================================");
    14. User user2 = mapper.queryUserById(1);
    15. System.out.println(user2);
    16. System.out.println(user == user2);
    17. sqlSession.close();
    18. }
    19. }

    测试之后:

    sql只走了一遍。说明是有缓存的,并没有从数据库中查询两次。

    增删改都需要清理缓存。因为增删改之后,数据会变,所以会清理缓存。而查询的时候数据不会变,所以还保留。

    手动清理缓存:(加了这段话之后,可以发现结果查询了两次数据库)

    二级缓存(只针对一个mapper也就是一个namespce)

    步骤:

    1. 开启全局缓存(二级缓存)

    2.开启缓存(只写一个cache标签也可以,下面的是官方标准的写法)

    1. <cache eviction="FIFO"
    2. flushInterval="60000"
    3. size="512"
    4. readOnly="true"/>

     3.Test文件

    1. @Test
    2. public void test2(){
    3. SqlSession session = MybatisUtils.getSqlSession();
    4. SqlSession session2 = MybatisUtils.getSqlSession();
    5. UserMapper mapper = session.getMapper(UserMapper.class);
    6. UserMapper mapper2 = session2.getMapper(UserMapper.class);
    7. User user = mapper.queryUserById(1);
    8. System.out.println(user);
    9. session.close();
    10. User user2 = mapper2.queryUserById(1);
    11. System.out.println(user2);
    12. System.out.println(user==user2);
    13. session2.close();
    14. }

    结果:

     说明已经开启了二级缓存。即使是两个不同的session也可以快速使用。

    自定义缓存

    了解即可。

    现在一般都是用redis数据库来做缓存。

    实现的话,就是在Mapper.xml中配置一个cache标签,自定义名字。之后配置一个resouce文件就可以了。

    不怎么关键,了解即可。

  • 相关阅读:
    2 分钟,教你用 Serverless 每天给女朋友自动发土味情话
    Turtle中circle用法详解
    Freeswitch代码
    使用 TiDB Lightning 恢复 S3 兼容存储上的备份数据
    【愚公系列】2022年07月 Go教学课程 024-函数
    Android项目出现了同一个依赖库的两个版本
    Python中的深度学习库有哪些?
    java基于微信小程序的大学生个人家庭理财产品 uniapp小程序
    unordered_map,unordered_set模拟实现
    [c++基础]-string类
  • 原文地址:https://blog.csdn.net/m0_54842832/article/details/127812859