首页 > 其他分享 >MyBatis的一级缓存

MyBatis的一级缓存

时间:2022-09-06 22:55:19浏览次数:62  
标签:缓存 一级 查询 sqlSession sqlSessionFactory User MyBatis id

在MyBatis中,一级缓存是默认开启的。

1、在一个SqlSession中,对User表进行两次根据ID的查询,查看发出sql语句的情况。

/**
 * 根据ID查询用户
 *
 * @param id
 * @return
 */
@Select("select * from user where id=#{id}")
User findUserById(Integer id);

@Before
public void before() throws Exception {
    System.out.println("before...");
    InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    //根据 sqlSessionFactory 产生 session
    sqlSession = sqlSessionFactory.openSession();
    // 这样也是可以的,这样的话后面就不用每次都设置了
    // sqlSession = sqlSessionFactory.openSession(true);
    userMapper = sqlSession.getMapper(IUserMapper.class);
}

@Test
public void testFindUserById() {
    //第一次查询,发出sql语句,并将查询出来的结果放进缓存中
    User user = userMapper.findUserById(1);
    System.out.println(user);

    //第二次查询,由于是同一个sqlSession,会在缓存中查询结果 //如果有,则直接从缓存中取出来,不和数据库进行交互
    User user2 = userMapper.findUserById(1);
    System.out.println(user2);
}

sql执行过程如下:

Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1677d1]
==>  Preparing: select * from user where id=?
==> Parameters: 1(Integer)
<==    Columns: id, username, password, birthday
<==        Row: 1, lucy, 123, 2019-12-12
<==      Total: 1
User{id=1, username='lucy', orderList=null, roleList=null}
User{id=1, username='lucy', orderList=null, roleList=null}

Process finished with exit code 0

标签:缓存,一级,查询,sqlSession,sqlSessionFactory,User,MyBatis,id
From: https://www.cnblogs.com/tangyouwei/p/mybatis-s-first-level-cache-zzbwpu.html

相关文章

  • Spring_Boot + Mybatis_Plus初始化
    创建SpringBoot项目基础创建及基本配置:https://www.cnblogs.com/Stars0121/p/16601285.html安装依赖项目所需依赖<dependencies><dependency>......
  • 前端不缓存,ajax不缓存,js操作cookie
    前端不缓存,ajax不缓存,js操作cookie 今天实现网站注销功能时,需要清除cookie缓存,开始在网上搜索的是“js清除缓存”,发现很多都是预先防患缓存存储的内容,千篇一律,不过也......
  • mybatis注入的快捷方法忍者鸟(mybatisx)和小辣椒(lombok)
    忍者鸟(mybatisx)和小辣椒(lombok)1.忍者鸟(mybatisx)作用:在mybatis注入时可以快速找到对应的方法图解:点击mapper接口中的方法左侧小红鸟后,即可跳转到对应的xml注解文件中的......
  • Mybatis学习笔记(七)——Mybatis关联查询
    级联关系是一个数据库实体的概念,有3种级联关系,分别是一对一级联、一对多级联以及多对多级联。例如,一个角色可以分配给多个用户,也可以只分配给一个用户。大部分场景下,我们......
  • Mybatis学习笔记(六)——Mybatis注解
    注解主要分为三大类,即SQL语句映射、结果集映射和关系映射。下面分别进行讲解。不过一般注解用的比较少。1.SQL语句映射1)@Insert:实现新增功能 这个方法是在mapper接口......
  • mybatis 动态排序
    publicclassPagination{//当前页privateIntegerpage=1;//一页显示条数privateIntegerlimit=10;//排序字段privat......
  • mybatis资源扫描 插件
    <!--在build中配置resources,来防止我们资源导出失败的问题--><build><resources><resource><directory>src/main/resources</directory>......
  • MyBatis 八——修改全部字段/修改动态字段
    配置文件完成修改全部字段1、编写接口方法:Mapper接口观察参数返回结果   2、编写SQL语句:SQL映射文件;  ......
  • MyBatis 六--动态条件查询
    查询多条件——动态查询SQL语句随着用户输入或者外部条件的变化而变化,我们成为动态SQL修改SQL语句即可,有两种方法:首先利用if标签来进行判断,wh......
  • MyBatis一级缓存介绍
    MyBatis一级缓存介绍默认情况下,MyBatis只启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存。这也就是大家常说的MyBatis一级缓存,一级缓存的作用域是SqlSession。M......