MyBatis一级缓存和二级缓存

10.1 缓存介绍:
缓存就是内存中的一个对象,用于对数据库查询结果的保存.好处减少与数据库
交互次数提高响应速度.

10.2 什么是会话
会话就是一次完整的交流.在一次完整交流过程中往往包含多次请求响应.
而发送请求都是同一个用户.SqlSession就是在用户与数据库进行一次会话过程中使用的接口.
10.3 MyBatis缓存分类

  1. 一级缓存:
    也称为[本地缓存],用于保存用户在一次会话过程中查询的结果.用户一次会话中
    只能使用一个SqlSession.一级缓存是自动开启,不允许关闭
  2. 二级缓存:
    也称为[全局缓存],是针对某一个表的查询结果存储.可以共享给所有针对这张表查询的用户,也就是说可以在多个SqlSession之间共享.
    10.4 一级缓存失效原因:
  3. 用户在一次会话过程中使用了多个SqlSession
  4. 用户在会话中使用同一个SqlSession,但是查询条件发生了变化
  5. 用户在会话中使用同一个SqlSession,但是清理了缓存
  6. 用户在会话中使用同一个SqlSession,但是在两次查询之间对数据库进行了修改

10.5 二级缓存开启设置

  1. 需要在MyBatis核心配置文件,通过settings标签开发二级缓存.


    image.png
  2. 在对应Mapper文件中添加<cache></cache>


    image.png
  3. 设置<cache>标签属性


    image.png
  4. 设置对应的实体类实现序列化接口

image.png

一。myBatis框架中缓存分类:

 一级缓存:

      [会话缓存]。在当前用户访问数据库期间,所有的查询结果都会自动
      保存起来。用户可以使用SqlSession从一级缓存中进行读取。
      而其他用户的SqlSession是不能读取当前用户的一级缓存
       一级缓存自动开启,开发人员是不能关闭一级缓存



 二级缓存:

     【全局缓存】,
      1.二级缓存针对某一个表来设置的共享缓存
      2.如果一个SqlSession对象将要被销毁时,MyBatis框架
        自动将这个SqlSession中与当前表关联的数据存放到这个共享缓存中.
      3.那么此时其他SqlSession如果需要得到相同的数据,就可以到共享缓存中
        读取

      4.由于二级缓存对于服务端内存消耗较大,因此MyBatis框架是不会主动
       开发二级缓存,需要开发人员手动开启二级。

二。一级缓存失效原因:

  1.同一个用户,使用两个SqlSession,是看不到一级缓存工作。

  2.在一个SqlSession,使用查询条件不同,也会导致一级缓存失效

               select * from dept where deptno=10    结果1
               select * from dept where deptno=20    结果2

  3.在一个SqlSession使用相同查询条件此时在查询之间进行数据修改操作导致一级缓存刷新(清空)

  4.在一个SqlSession使用相同查询条件此时手动刷新缓存时导致一级缓存失败

三。与MyBatis中【一级缓存】和【二级缓存】关联的属性

  1.全句变量:核心配置文件

            <settings>
                  <setting   name="cacheEnabled"  value="true"/>
           </settings>

           1)cacheEnabled[默认值就是true]: 表示开启二级缓存
           2)cacheEnabled=false,         关闭二级缓存。一级缓存依然存在

 2.useCache: mapper.xml 会在<select>出现属性

             <select id="findDeptByNo"  resultType="dept" useCache="true">

           1)useCache只出现在<select>
           2)useCache默认值就是true
           3)userCache设置false时,对于一级缓存没有任何影响
                                   此时第一个SqlSession与当前查询语句
                                   关联的结果,在第一个SqlSession关闭时
                                   是不会放到二级缓存中。


 3.flushCache:mapper.xml

          1)flushCache会出现【添加,更新,删除,查询】标签 
          2)flushCache属性决定当前SQL执行完毕后,是否会刷新(清空)缓存
          3)flushCache在【添加,更新,删除】标签中,默认值true  
           (清空一级缓存数据/清空二级缓存对应的mapper.xml所有数据)
          4)flushCache在【添加,更新,删除】标签中,设置为false
            (清空一级缓存数据/不会清空二级缓存数据) 

          5)flushCache也可以在【查询标签出现】,默认值false
             (一级缓存和二级缓存都可以使用)
          6)flushCache在查询标签中设置为true。(查询结果不会保存到一级缓存和二级缓存)

4.sqlSession.clearCache(): 只会清空当前会话的一级缓存。不会影响数据保存到二级缓存

                        MyBatis框架中事务管理方式

一。什么事务

       就是数据库一个备份方案

二。JDBC 如何控制事务

      connection.setAutoCommit(false);
      通知数据库,只要是从这个通道推送的sql语句
      当做一个整体处理,只做一次备份。对于操作的结果是否是提交还是回滚
      由当前通道说得算。

      try{
          ps.addBatch();
          con.commit();
         }catch(SQLException ex){

            con.rollback()
         }

三。MyBatis框架对于事务管理方式:

    1.MyBatis框架中亲自完成JDBC事务管理细节

    2.把事务管理细节交给管理MyBatis框架的其他框架(Spring)

四。Transaction接口:

        getConnection(): 获得connection
        close():        关闭或则返还connection
        commit():      提交事务
        rollback():    事务回滚

五 Transaction接口的实现类:

        1.JDBCTransaction:MyBatis亲自实现事务管理细节
        2.ManagedTransaction:委托其他框架来提供事务管理细节
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容