• mybatis由浅入深day02_7查询缓存_7.2一级缓存_一级缓存应用


    查询缓存

      7.1 什么是查询缓存

    mybatis提供查询缓存,用于减轻数据压力,提高数据库性能。

    mybaits提供一级缓存,和二级缓存。

     

    一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。

    Mybatis一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。当一个sqlSession结束后该sqlSession中的一级缓存也就不存在了。Mybatis默认开启一级缓存。

    二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

    Mybatis二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。Mybatis默认没有开启二级缓存需要在setting全局参数中配置开启二级缓存。

      

    为什么要用缓存?

    如果缓存中有数据就不用从数据库中获取,大大提高系统性能。

      

      7.2 一级缓存

        7.2.1 一级缓存工作原理

    下图是根据id查询用户的一级缓存图解:

      

    第一次发起查询用户id为1的用户信息,先去找缓存中是否有id为1的用户信息,如果没有,从数据库查询用户信息。

    得到用户信息,将用户信息存储到一级缓存中。

    如果sqlSession去执行commit操作(执行插入、更新、删除),清空SqlSession中的一级缓存,这样做的目的为了让缓存中存储的是最新的信息,避免脏读。

    第二次发起查询用户id为1的用户信息,先去找缓存中是否有id为1的用户信息,缓存中有,直接从缓存中获取用户信息。

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

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

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

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

        7.2.2 一级缓存测试

    mybatis默认支持一级缓存,不需要在配置文件去配置。

    按照上边一级缓存原理步骤去测试。

      

      

    打断点测试跟踪一级缓存的实现原理

        7.2.3 一级缓存应用

    正式开发,是将mybatis和spring进行整合开发,事务控制在service中。

    一个service方法中包括 很多mapper方法调用。

    service{

      //开始执行时,开启事务,创建SqlSession对象

      //第一次调用mapper的方法findUserById(1)

      //第二次调用mapper的方法findUserById(1),从一级缓存中取数据

      //方法结束,sqlSession关闭

    }

    如果是执行两次service调用查询相同的用户信息,不走一级缓存,因为service方法结束,sqlSession就关闭,一级缓存就清空。

  • 相关阅读:
    web开发之web 验证码--- webqq 机器人
    赛星软件---智能视频分析事件检测
    模式识别之双目立体视觉---双目立体视觉相关介绍
    安卓项目之微信公众好---初体验
    《数学分析》视频
    单目和双目模式识别---游戏控制
    多媒体开发之音频编码---ffmpeg 编码aac
    PC如何访问手机网址
    linux shell实现守护进程 看门狗 脚本
    grep用法详解:grep与正则表达式
  • 原文地址:https://www.cnblogs.com/justdoitba/p/8051700.html
Copyright © 2020-2023  润新知