当前位置:首页文章首页 IT学院 IT技术

为了喷mybatis我下载了mybatis源码

作者:  来源:  发布时间:2011-12-10 12:14:09  点击:

久闻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是如何工作的。

首页 上一页 [1] [2] [3]  下一页 尾页

文章评论

软件按字母排列: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z