变态重口极致另类在线-波多久久夜色精品国产-波多野结衣在线观看一区-波多野结衣在线观看一区二区-污污的网站免费阅读-污污视频网址

當前位置: 首頁IT技術 → 為了噴mybatis我下載了mybatis源碼

為了噴mybatis我下載了mybatis源碼

更多

久聞mybatis/ibatis大名今天終于爆發了,找了一堆mybatis的討論。。。這部分大多是關乎sql寫在xml之類的

 

看了下mybatis的高速緩存的討論。。。這部分無不例外的在分享緩存的配置。。。包括緩存實現。。。緩存過期策略。。。

 

LRU。。。FIFO。。。

 

如果說在xml里面寫sql。。并且在上一堆dtd描述。。并且聲稱這樣便于dba維護sql。。可以直接把寫好的sql copy到xml里面去。。可以統一管理。 好吧,這些都屬于個人習慣,無所謂。

只不過我在想把這些sql變成方法,例如最簡單的一個:

 

  1. <select id=”getUserList” resultMap="UserResult" cacheModel=”user-cache”>  
  2.     select * from USER  
  3. </select> 
  4. 變成:
  5. public UserResult getUserList(){
  6. return baseDao.find("select * from USER");
  7. }

 

 

我了解的太少,還沒能看出這樣有什么分別。關于這個,我只是有點點疑惑。(當然,你可以把這些寫在一個類里面,便于你們的DBA維護)

 

。。。。。。。。。

作為一個ORM框架,除了面向對象查詢 如JPA之類的,還有一個不得不提的東西:緩存。

 

在我為緩存頭痛的時候,我努力的尋找mybatis緩存的做法。畢竟這么多人使用的框架一定可以學習一下緩存的實現。

 

在我輸入關鍵詞:ibatis 緩存/mybatis 緩存 看過基本上找到并且有時間去看的文章之后,我心里產生了一個疑問:為什么這些人來來去去都是講的LRU、FIFO這些東西,或者貼出了這么一段精妙絕倫的代碼:

 

 

Java代碼  
  1. public List query(MappedStatement ms, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler) throws SQLException {  
  2.   if (ms != null) {  
  3.     Cache cache = ms.getCache();  
  4.     if (cache != null) {  
  5.       flushCacheIfRequired(ms);  
  6.       cache.getReadWriteLock().readLock().lock();  
  7.       try {  
  8.         if (ms.isUseCache() && resultHandler == null) {  
  9.           CacheKey key = createCacheKey(ms, parameterObject, rowBounds);  
  10.           final List cachedList = (List) cache.getObject(key);  
  11.           if (cachedList != null) {  
  12.             return cachedList;  
  13.           } else {  
  14.             List list = delegate.query(ms, parameterObject, rowBounds, resultHandler);  
  15.             tcm.putObject(cache, key, list);  
  16.             return list;  
  17.           }  
  18.         } else {  
  19.           return delegate.query(ms, parameterObject, rowBounds, resultHandler);  
  20.         }  
  21.       } finally {  
  22.         cache.getReadWriteLock().readLock().unlock();  
  23.       }  
  24.     }  
  25.   }  
  26.   return delegate.query(ms, parameterObject, rowBounds, resultHandler);  
  27. }  

 

 當然,還有不少人畫了一些UML例圖來給苦難大眾講解 CachingExecutor是如何工作的。

我不懂UML,也不知道怎么為這些精妙的if else畫用例圖。我開始走向絕望:“為什么這群人來來去去僅僅關心這些東西?”

 

于是乎我下載了mybatis的源碼,還好其結構很清晰。我在想“mybatis是如何讓緩存過期?”畢竟這個是緩存的關鍵所在,于是我找到了這個:

 

 

 

Java代碼  
  1. public int update(MappedStatement ms, Object parameterObject) throws SQLException {  
  2.   flushCacheIfRequired(ms);  
  3.   return delegate.update(ms, parameterObject);  
  4. }  
 

 

 

然后我又看到了這個:

 

Java代碼  
  1. private void flushCacheIfRequired(MappedStatement ms) {  
  2.   Cache cache = ms.getCache();  
  3.   if (cache != null) {  
  4.     if (ms.isFlushCacheRequired()) {  
  5.       tcm.clear(cache);  
  6.     }  
  7.   }  
  8. }  

 

 我很震驚,就這么樣的。整個Cache被clear了。很簡潔。哦不,是根本不帶任何煩雜的處理,干脆利落的干掉了緩存的老巢。

 

MappedStatement到底是何方神圣,雖然不知道也沒看也看不明白(和傳聞中的一樣,不帶一絲注釋),但是據我猜測加上看到的一些mybatis的配置。

我想mybatis把一個xml/namespace的sqlMap 裝進了一個Cache,然后。。。沒有然后了。

 

這不禁的讓我想到了看到的動畫片里面感到疑惑不解的是為什么一個小飛船biu的一下巨大的戰艦就爆了。

 

。。。。。。。。。。。。。。

對于這種緩存,我想到了這么一個場景。a用戶查詢得到查詢緩存,b用戶update自己的東西。a用戶的查詢緩存又掛了,重新查詢得到查詢緩存。

當然,mybatis的緩存是大家的,不分你我他。

 

。。。。。。。。

如果,你真的有那么一些更新不頻繁的接口。我建議使用spring的緩存,有clear方法。針對整個方法/事物。

熱門評論
最新評論
第 1 樓 美國CZ88.NET 網友 客人 發表于: 2014/10/24 15:20:18
听到你说biu的一声,我震惊了

支持( 0 ) 蓋樓(回復)

昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字數: 0/500 (您的評論需要經過審核才能顯示)
主站蜘蛛池模板: 一级片在线免费 | 成人羞羞国产免费软件 | 亚洲国产精品久久网午夜 | 成人在线毛片 | 国产专区日韩精品欧美色 | 日韩欧美一区二区三区在线视频 | 丝袜美腿极品老师系列集合 | 午夜精品久久久久 | 欧美一区二区三区男人的天堂 | 国产黄在线播放免费观看 | 久久99国产亚洲高清观看首页 | 中文字幕视频 | 欧美天堂色 | 国产精品视频二区不卡 | 新版天堂中文资源官网 | 一个人看的www免费观看视频 | 一级做α爱过程免费视频 | 波多野结衣中文字幕在线 | 日韩欧| 国产成人免费a在线资源 | 护士在线观看 | 中国高清videossex免费 | 手机在线你懂的 | 最近更新中文字幕2019视频 | 久久久久88色偷偷 | 国产欧美日韩视频免费61794 | 五月天婷婷免费视频观看 | 开心激情五月婷婷 | 日本免费不卡视频一区二区三区 | 亚洲国产成人综合精品2020 | 在线视频一区二区三区三区不卡 | 337p日本大胆欧洲色噜噜高清 | 欧美亚洲国产另类 | 精品视频一区二区三三区四区 | 免费高清小黄站在线观看 | 伊人影视大全 | 一级日韩一级欧美 | 国产成人精品免费久久久久 | 国产一级黄色大片 | 99re最新地址精品视频 | 激情五月深爱五月 |