- 1. StaxRip ┊开源源码且完全免费的所有视频转换文件┊...
- 2. CF改枪源码
- 3. 网页探针(查看网页任意对象HTML源码) V2.0 简体中文...
- 4. 学校建站必备(漂亮大气的学校网站源码) V1.0中文...
- 5. 为投票评选行业量身开发智睿投票评选管理系统源码 ...
- 6. 只要你会打字就会做网站露珠源码站 v3.28
- 7. B2B行业网站源码行业商务B2B网站蓝色模板 正式版
- 8. 开放源码的矢量绘图软件多语言绿色便携版Inkscape ...
- 9. 一个开放源码的免费的P2P客户端软件DC++ v0.782 S...
- 10. 针对64位系统的开放源码聊天软件ApexDC x64 V1.4.0
为了喷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变成方法,例如最简单的一个:
- <select id=”getUserList” resultMap="UserResult" cacheModel=”user-cache”>
- select * from USER
- </select>
- 变成:
- public UserResult getUserList(){
- return baseDao.find("select * from USER");
- }
我了解的太少,还没能看出这样有什么分别。关于这个,我只是有点点疑惑。(当然,你可以把这些写在一个类里面,便于你们的DBA维护)
。。。。。。。。。
作为一个ORM框架,除了面向对象查询 如JPA之类的,还有一个不得不提的东西:缓存。
在我为缓存头痛的时候,我努力的寻找mybatis缓存的做法。毕竟这么多人使用的框架一定可以学习一下缓存的实现。
在我输入关键词:ibatis 缓存/mybatis 缓存 看过基本上找到并且有时间去看的文章之后,我心里产生了一个疑问:为什么这些人来来去去都是讲的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);
- }
当然,还有不少人画了一些UML例图来给苦难大众讲解 CachingExecutor是如何工作的。
上一篇:freyja 将引入“分组”概念提高维护缓存时的效率 下一篇:
[收藏此文章]