當前位置:編程學習大全網 - 源碼下載 - mybatismap怎麽根據緩存查詢mybatis的緩存

mybatismap怎麽根據緩存查詢mybatis的緩存

如何使用mybatisL2緩存?

了解更多關於MyBatisL2緩存的信息

首先,創建緩存的整個過程

我們從SqlSessionFactoryBuilder解析mybatis-config.xml配置文件開始:

readerreader=resources.getresourceasreader(mybatis-config.XML);

SqlSessionFactorySqlSessionFactory=newSqlSessionFactorybuilder()。構建(閱讀器);

然後:

XMLConfigBuilderparser=newXMLConfigBuilder(inputStream,environment,properties);

返回build(parser.parse());

看看parser.parse()方法:

parseconfiguration(parser.evalnode(/配置

查看處理Mapper.xml文件的位置:

mapperelement(root.evalnode(地圖繪制者

看看處理Mapper.xml的XMLMapperBuilder:

XMLmapperbuildermapperparser=newXMLmapperbuilder(inputStream,configuration,

resource,configuration.getsqlfragments());

mapperparser.parse();

繼續看看解析方法:

configurationelement(parser.evalnode/mapper));

轉到此處:

stringnamespace=context.getstringattribute(命名空間

if(namespace.equals(映射器的命名空間不能為空);

}

builderassistant.setcurrentnamespace(命名空間);

cacheRefElement(context.evalnode(cache-ref));

cacheElement(context.evalnode(緩存

看這裏,名稱空間是

看看我的巴蒂斯如何處理

私有voidcacheElement(XNode上下文)引發異常{

如果(上下文!=null){

stringtype=context.getstringattribute(鍵入

Class

stringeviction=context.getstringattribute(驅逐);

Class

longflushinterval=context.getlongattribute(flushInterval

integersize=context.getintattribute(尺寸

布爾讀寫=!context.getbooleanattribute(只讀,假);

booleanblocking=context.getbooleanattribute(阻止

propertiesprops=context.getchildrenaspproperties();

builderasistant.usenewcache(typeclass,evictionClass,

flushInterval、size、readWrite、blocking、props);

}

}

從源代碼中可以看到MyBatis已經讀取了那些屬性,很容易就可以得到這些屬性的默認值。

Java的cache對象方法是builderAssistant.useNewCache我們來看看這段代碼:

公***緩存useNewCache(Class馬鞭延伸緩存

evictionclass=valueOrDefault(evictionclass,lrucache.class);

Cachecache=新的CacheBuilder(當前命名空間)

.實現(類型類)

.addDecorator(evictionClass)

.清除時間間隔

.尺寸(大小)

.讀寫(讀寫)

.阻斷(阻斷)

.屬性(道具)

.build();

configuration.addCache(緩存);

currentCache=cache

返回緩存;

}

從調用這個方法的地方我們可以看到,並沒有使用返回值緩存,而是在後面的過程中創建MappedStatement時使用了currentCache。

第二,使用緩存過程

在系統中,使用緩存的地方是在CachingExecutor中:

@覆蓋

公***

獲取緩存後,先確定是否有二級緩存。

僅通過,

然後根據xml配置的屬性useCache判斷是否使用緩存(resultHandler常用的默認值很少為null)。

if(ms.isusecache()

如果沒有問題,將根據鍵從緩存中獲取值:

@suppresswarnings(未選中E

如果沒有緩存,將執行查詢,並將查詢結果放入緩存中。

if(list==null){

列表=委托。

tcm.putObject(緩存、鍵、列表);//問題#578和#116

}

返回結果

退貨單;

}

}

沒有緩存時,直接執行查詢。

返回委托。

}

在上面的代碼中,tcm.putObject(cache,key,list);這段代碼緩存結果。但實際上,直到sqlsession關閉,MyBatis才以序列化的形式保存在Map(默認緩存配置)中。

三、使用緩存時的註意事項

1.緩存只能用於具有單表操作的表。

只需要保證這個表在整個系統中只有壹個表操作,所有和這個表相關的操作都必須在壹個命名空間中。

2.當您可以保證查詢遠遠大於插入、更新和刪除操作時,請使用緩存。

這不用我說,大家應該都知道。記住,這需要在1的前提下保證!

第四,避免使用L2緩存。

這裏可能有很多人不理解。L2緩存帶來的好處遠遠小於隱患。

緩存在命名空間中,不同命名空間中的操作互不影響。

插入、更新和刪除操作將清除空所在的名稱空間中的所有緩存。

通常在MyBatisGenerator生成的代碼中,每個表都是獨立的,每個表都有自己的命名空間。

為什麽避免使用L2緩存?

符合緩存使用註意事項

mybatiscollection的三種用法?

mybatis使用foreach中collection的三種用法

foreach的主要用在構建in條件中,它可以在SQL語句中進行叠代壹個集合。

foreach元素的屬性主要有item,index,collection,open,separator,close。

item表示集合中每壹個元素進行叠代時的別名,

index指定壹個名字,用於表示在叠代過程中,每次叠代到的位置,

open表示該語句以什麽開始,

separator表示在每次進行叠代之間以什麽符號作為分隔符,

close表示以什麽結束。

在使用foreach的時候最關鍵的也是最容易出錯的就是collection屬性,該屬性是必須指定的,但是在不同情況下,該屬性的值是不壹樣的,主要有壹下3種情況:

1.如果傳入的是單參數且參數類型是壹個List的時候,collection屬性值為list

2.如果傳入的是單參數且參數類型是壹個array數組的時候,collection的屬性值為array

3.如果傳入的參數是多個的時候,我們就需要把它們封裝成壹個Map了,當然單參數也可

以封裝成map,實際上如果妳在傳入參數的時候,在breast裏面也是會把它封裝成壹個Map的,map的key就是參數名,所以這個時候collection屬性值就是傳入的List或array對象在自己封裝的map裏面的key下面分別來看看上述三種情況的示例代碼

mybatis怎麽將壹個表中符合查詢條件的多條記錄,返回為壹個list+map的形式?

xml中配置好pojo對象然後將properties和數據庫字段匹配即可

  • 上一篇:095.松本零士 臺版尖端《銀河鐵道999》典藏版1-10已完結
  • 下一篇:如何獲得空白紅包?
  • copyright 2024編程學習大全網