亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

wanglu1209 / 3591人閱讀

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

前言

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

Mybatis緩存

一級緩存

二級緩存

與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提供一級緩存和二級緩存

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

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

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

Mybatis一級緩存

Mybatis的一級緩存原理

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

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

value:用戶信息

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

Mybatis一級緩存值得注意的地方:

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

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

Mybatis二級緩存

二級緩存原理:

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

Mybatis二級緩存配置

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

    
    
        
        
    

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


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

mybatis二級緩存需要將查詢結(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

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

禁用二級緩存

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

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

<tr id="dngjt"><td id="dngjt"></td></tr>

      <