• 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(); }

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

  • 相关阅读:
    CentOS下安装vsftpd
    Linux下快速删除大量文件
    /var/spool/postfix/maildrop/ 中有大量的文件
    Linux 查看目录大小及文件数量命令
    windows下体验Redis
    hMailServer SSL 配置
    vmware 安装 Mac OS X 10.9 Mavericks
    提问和看不懂
    C 语言学习 第三次作业总结
    C 语言学习 第二次作业总结
  • 原文地址:https://www.cnblogs.com/64Byte/p/13039554.html
Copyright © 2020-2023  润新知