zoukankan      html  css  js  c++  java
  • Mybatis的一级缓存

    Mybatis的缓存: 提高查询效率

       查询数据 --> 发送sql语句--> 到数据库执行sql, 返回查询到的数据

    Mybatis一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,

    第一次执行完毕会将数据库中查询的数据写到缓存(内存),

    第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。

    当一个sqlSession结束后该sqlSession中的一级缓存也就不存在了。Mybatis默认开启一级缓存。

    一级缓存图解

    一级缓存区域是根据SqlSession为单位划分的。

    每次查询会先从缓存区域找,如果找不到从数据库查询,查询到数据将数据写入缓存。

    Mybatis内部存储缓存使用一个HashMap,key为hashCode+sqlId+Sql语句value为从查询出来映射生成的java对象,

    sqlSession执行insert、update、delete等操作commit提交后会清空缓存区域

    代码:(执行一条sql语句)

    @Test
        public void testCache1() throws Exception{
            SqlSession sqlSession = sqlSessionFactory.openSession();//创建代理对象
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            //下边查询使用一个SqlSession
            //第一次发起请求,查询id为1的用户
            User user1 = userMapper.findUserById(1);
            System.out.println(user1);
    //        如果sqlSession去执行commit操作(执行插入、更新、删除),
    清空SqlSession中的一级缓存,这样做的目的为了让缓存中存储的是最新的信息,避免脏读
    //更新user1的信息 user1.setUsername("aa"); userMapper.updateUser(user1); //执行commit操作去清空缓存 sqlSession.commit(); //第二次发起请求,查询id为1的用户 User user2 = userMapper.findUserById(1); System.out.println(user2); sqlSession.close(); }

    脏读: 读取的数据与数据库不一致.

  • 相关阅读:
    js字符串数组['1','2','3']转number
    antd-vue中给table表格整行加点击事件
    vue中路由在新的标签页打开
    antd中的form表单 initialValue导致数据不更新问题
    vue中computed的作用以及用法
    gitlab新增ssh
    CentOS7安装配置ActiveMQ
    利用已有的缓存地图文件发布ArcGIS Server瓦片服务
    CentOS7上使用源码安装物联网大数据平台TDengine
    一些可以使用的在线地图服务
  • 原文地址:https://www.cnblogs.com/64Byte/p/13039554.html
Copyright © 2011-2022 走看看