成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Mybatis【逆向工程,緩存,代理】知識(shí)要點(diǎn)

wanglu1209 / 3550人閱讀

摘要:一級(jí)緩存值得注意的地方默認(rèn)就是支持一級(jí)緩存的,并不需要我們配置和整合后進(jìn)行代理開發(fā),不支持一級(jí)緩存,和整合,按照的模板去生成代理對象,模板中在最后統(tǒng)一關(guān)閉??偨Y(jié)的一級(jí)緩存是級(jí)別的。

前言

本文主要講解Mybatis的以下知識(shí)點(diǎn):

Mybatis緩存

一級(jí)緩存

二級(jí)緩存

與Ehcache整合

Mapper代理

使用Mapper代理就不用寫實(shí)現(xiàn)類了

逆向工程

自動(dòng)生成代碼

Mybatis緩存

緩存的意義

將用戶經(jīng)常查詢的數(shù)據(jù)放在緩存(內(nèi)存)中,用戶去查詢數(shù)據(jù)就不用從磁盤上(關(guān)系型數(shù)據(jù)庫數(shù)據(jù)文件)查詢,從緩存中查詢,從而提高查詢效率,解決了高并發(fā)系統(tǒng)的性能問題。

mybatis提供一級(jí)緩存和二級(jí)緩存

mybatis一級(jí)緩存是一個(gè)SqlSession級(jí)別,sqlsession只能訪問自己的一級(jí)緩存的數(shù)據(jù)

二級(jí)緩存是跨sqlSession,是mapper級(jí)別的緩存,對于mapper級(jí)別的緩存不同的sqlsession是可以共享的。

看完上面對Mybatis的緩存的解釋,我們發(fā)現(xiàn)Mybatis的緩存和Hibernate的緩存是極為相似的..

Mybatis一級(jí)緩存

Mybatis的一級(jí)緩存原理

第一次發(fā)出一個(gè)查詢sql,sql查詢結(jié)果寫入sqlsession的一級(jí)緩存中,緩存使用的數(shù)據(jù)結(jié)構(gòu)是一個(gè)map

key:hashcode+sql+sql輸入?yún)?shù)+輸出參數(shù)(sql的唯一標(biāo)識(shí))

value:用戶信息

同一個(gè)sqlsession再次發(fā)出相同的sql,就從緩存中取不走數(shù)據(jù)庫。如果兩次中間出現(xiàn)commit操作(修改、添加、刪除),本sqlsession中的一級(jí)緩存區(qū)域全部清空,下次再去緩存中查詢不到所以要從數(shù)據(jù)庫查詢,從數(shù)據(jù)庫查詢到再寫入緩存。

Mybatis一級(jí)緩存值得注意的地方:

Mybatis默認(rèn)就是支持一級(jí)緩存的,并不需要我們配置.

mybatis和spring整合后進(jìn)行mapper代理開發(fā),不支持一級(jí)緩存,mybatis和spring整合,spring按照mapper的模板去生成mapper代理對象,模板中在最后統(tǒng)一關(guān)閉sqlsession。

Mybatis二級(jí)緩存

二級(jí)緩存原理:

二級(jí)緩存的范圍是mapper級(jí)別(mapper同一個(gè)命名空間),mapper以命名空間為單位創(chuàng)建緩存數(shù)據(jù)結(jié)構(gòu),結(jié)構(gòu)是map。

Mybatis二級(jí)緩存配置

需要我們在Mybatis的配置文件中配置二級(jí)緩存

    
    
        
        
    

上面已經(jīng)說了,二級(jí)緩存的范圍是mapper級(jí)別的,因此我們的Mapper如果要使用二級(jí)緩存,還需要在對應(yīng)的映射文件中配置..


    
查詢結(jié)果映射的pojo序列化

mybatis二級(jí)緩存需要將查詢結(jié)果映射的pojo實(shí)現(xiàn) java.io.serializable接口,如果不實(shí)現(xiàn)則拋出異常:

org.apache.ibatis.cache.CacheException: Error serializing object.  Cause: java.io.NotSerializableException: cn.itcast.mybatis.po.User

二級(jí)緩存可以將內(nèi)存的數(shù)據(jù)寫到磁盤,存在對象的序列化和反序列化,所以要實(shí)現(xiàn)java.io.serializable接口。
如果結(jié)果映射的pojo中還包括了pojo,都要實(shí)現(xiàn)java.io.serializable接口。

禁用二級(jí)緩存

對于變化頻率較高的sql,需要禁用二級(jí)緩存:

在statement中設(shè)置useCache=false可以禁用當(dāng)前select語句的二級(jí)緩存,即每次查詢都會(huì)發(fā)出sql去查詢,默認(rèn)情況是true,即該sql使用二級(jí)緩存。、、

  • <ul id="muiks"></ul>
    <fieldset id="muiks"><input id="muiks"></input></fieldset>
    <abbr id="muiks"></abbr>
  • <fieldset id="muiks"><menu id="muiks"></menu></fieldset>
    • <ul id="muiks"></ul>
        <strike id="muiks"><input id="muiks"></input></strike>
        <