- 1. StaxRip ┊開源源碼且完全免費(fèi)的所有視頻轉(zhuǎn)換文件┊...
- 2. CF改槍源碼
- 3. 網(wǎng)頁(yè)探針(查看網(wǎng)頁(yè)任意對(duì)象HTML源碼) V2.0 簡(jiǎn)體中文...
- 4. 學(xué)校建站必備(漂亮大氣的學(xué)校網(wǎng)站源碼) V1.0中文...
- 5. 為投票評(píng)選行業(yè)量身開發(fā)智睿投票評(píng)選管理系統(tǒng)源碼 ...
- 6. 只要你會(huì)打字就會(huì)做網(wǎng)站露珠源碼站 v3.28
- 7. B2B行業(yè)網(wǎng)站源碼行業(yè)商務(wù)B2B網(wǎng)站藍(lán)色模板 正式版
- 8. 開放源碼的矢量繪圖軟件多語(yǔ)言綠色便攜版Inkscape ...
- 9. 一個(gè)開放源碼的免費(fèi)的P2P客戶端軟件DC++ v0.782 S...
- 10. 針對(duì)64位系統(tǒng)的開放源碼聊天軟件ApexDC x64 V1.4.0
為了噴mybatis我下載了mybatis源碼
久聞mybatis/ibatis大名今天終于爆發(fā)了,找了一堆mybatis的討論。。。這部分大多是關(guān)乎sql寫在xml之類的
看了下mybatis的高速緩存的討論。。。這部分無(wú)不例外的在分享緩存的配置。。。包括緩存實(shí)現(xiàn)。。。緩存過期策略。。。
LRU。。。FIFO。。。
如果說在xml里面寫sql。。并且在上一堆dtd描述。。并且聲稱這樣便于dba維護(hù)sql。?梢灾苯影褜懞玫膕ql copy到xml里面去。。可以統(tǒng)一管理。 好吧,這些都屬于個(gè)人習(xí)慣,無(wú)所謂。
只不過我在想把這些sql變成方法,例如最簡(jiǎn)單的一個(gè):
- <select id=”getUserList” resultMap="UserResult" cacheModel=”user-cache”>
- select * from USER
- </select>
- 變成:
- public UserResult getUserList(){
- return baseDao.find("select * from USER");
- }
我了解的太少,還沒能看出這樣有什么分別。關(guān)于這個(gè),我只是有點(diǎn)點(diǎn)疑惑。(當(dāng)然,你可以把這些寫在一個(gè)類里面,便于你們的DBA維護(hù))
。。。。。。。。。
作為一個(gè)ORM框架,除了面向?qū)ο蟛樵?如JPA之類的,還有一個(gè)不得不提的東西:緩存。
在我為緩存頭痛的時(shí)候,我努力的尋找mybatis緩存的做法。畢竟這么多人使用的框架一定可以學(xué)習(xí)一下緩存的實(shí)現(xiàn)。
在我輸入關(guān)鍵詞:ibatis 緩存/mybatis 緩存 看過基本上找到并且有時(shí)間去看的文章之后,我心里產(chǎn)生了一個(gè)疑問:為什么這些人來(lái)來(lái)去去都是講的LRU、FIFO這些東西,或者貼出了這么一段精妙絕倫的代碼:
- public List query(MappedStatement ms, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler) throws SQLException {
- if (ms != null) {
- Cache cache = ms.getCache();
- if (cache != null) {
- flushCacheIfRequired(ms);
- cache.getReadWriteLock().readLock().lock();
- try {
- if (ms.isUseCache() && resultHandler == null) {
- CacheKey key = createCacheKey(ms, parameterObject, rowBounds);
- final List cachedList = (List) cache.getObject(key);
- if (cachedList != null) {
- return cachedList;
- } else {
- List list = delegate.query(ms, parameterObject, rowBounds, resultHandler);
- tcm.putObject(cache, key, list);
- return list;
- }
- } else {
- return delegate.query(ms, parameterObject, rowBounds, resultHandler);
- }
- } finally {
- cache.getReadWriteLock().readLock().unlock();
- }
- }
- }
- return delegate.query(ms, parameterObject, rowBounds, resultHandler);
- }
當(dāng)然,還有不少人畫了一些UML例圖來(lái)給苦難大眾講解 CachingExecutor是如何工作的。