`
aa87963014
  • 浏览: 154505 次
  • 性别: Icon_minigender_1
  • 来自: 布尼塔尼亚
社区版块
存档分类
最新评论

为了喷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这些东西,或者贴出了这么一段精妙绝伦的代码:

 

 

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

我不懂UML,也不知道怎么为这些精妙的if else画用例图。我开始走向绝望:“为什么这群人来来去去仅仅关心这些东西?”

 

于是乎我下载了mybatis的源码,还好其结构很清晰。我在想“mybatis是如何让缓存过期?”毕竟这个是缓存的关键所在,于是我找到了这个:

 

 

 

  public int update(MappedStatement ms, Object parameterObject) throws SQLException {
    flushCacheIfRequired(ms);
    return delegate.update(ms, parameterObject);
  }
 

 

 

然后我又看到了这个:

 

  private void flushCacheIfRequired(MappedStatement ms) {
    Cache cache = ms.getCache();
    if (cache != null) {
      if (ms.isFlushCacheRequired()) {
        tcm.clear(cache);
      }
    }
  }

 

 我很震惊,就这么样的。整个Cache被clear了。很简洁。哦不,是根本不带任何烦杂的处理,干脆利落的干掉了缓存的老巢。

 

MappedStatement到底是何方神圣,虽然不知道也没看也看不明白(和传闻中的一样,不带一丝注释),但是据我猜测加上看到的一些mybatis的配置。

我想mybatis把一个xml/namespace的sqlMap 装进了一个Cache,然后。。。没有然后了。

 

这不禁的让我想到了看到的动画片里面感到疑惑不解的是为什么一个小飞船biu的一下巨大的战舰就爆了。

 

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

对于这种缓存,我想到了这么一个场景。a用户查询得到查询缓存,b用户update自己的东西。a用户的查询缓存又挂了,重新查询得到查询缓存。

当然,mybatis的缓存是大家的,不分你我他。

 

。。。。。。。。

如果,你真的有那么一些更新不频繁的接口。我建议使用spring的缓存,有clear方法。针对整个方法/事物。

 

 

欢迎对喷

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    MyBatis源码分析.pdf

    MyBatis源码分析 MyBatis是一款流行的Java持久层框架,提供了强大的数据库访问能力,本文将对MyBatis的源码进行深入分析,从而帮助读者更好地理解MyBatis的工作机理。 1. MyBatis入门 MyBatis是一款基于Java的...

    5套完整springboot+mybatis源码下载只供学习之用.rar

    通过学习这些源码,你可以深入理解SpringBoot如何启动、如何配置自动装配,以及MyBatis如何与数据库交互。同时,Shiro的使用也能帮助你掌握用户权限的控制。对于初学者,这是一个很好的实践平台,对于有经验的开发者...

    Mybatis源码分析.pdf

    总结起来,MyBatis源码分析涵盖了从配置加载到数据库操作的全过程,涉及到了配置解析、SQL执行、结果映射等多个关键环节,以及Executor、StatementHandler等核心组件。通过深入学习MyBatis的源码,开发者不仅可以...

    mybatis核心源码

    mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码...

    mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip

    mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip ...

    MyBatis官方包和源码包.zip

    这个名为"MyBatis官方包和源码包.zip"的压缩文件包含了MyBatis的两个主要版本——3.2.3和3.3的完整jar包以及对应的源码。这对于开发者来说是一份极其宝贵的资源,因为理解并研究源码有助于深入学习MyBatis的工作原理...

    mybatis-3.2.2-src.rar 源码

    这个源码包"mybatis-3.2.2-src.rar"包含了完整的Mybatis 3.2.2版本的源代码,对开发者来说是一份宝贵的学习资源。 源码分析可以从以下几个主要方面展开: 1. **架构设计**:Mybatis 的核心组件包括...

    mybatis源码分析视频

    本资源“mybatis源码分析视频”是针对MyBatis框架进行深入剖析的教程,通过视频和文档的形式帮助学习者理解其内部工作机制。 1. **MyBatis简介** MyBatis消除了几乎所有的JDBC代码和手动设置参数以及获取结果集。...

    MyBatis源码详解学习.zip

    《MyBatis源码详解学习》是一份专为对MyBatis源码感兴趣的开发者准备的资料,它旨在帮助读者深入理解这个流行持久层框架的工作原理。MyBatis作为一个轻量级的ORM(对象关系映射)框架,因其简单易用、高度可定制化的...

    mybatis源码.rar

    源码分析是理解框架工作原理的重要途径,通过阅读MyBatis的源码,我们可以深入学习其内部机制,包括SQL动态生成、结果映射、事务管理等方面。 1. SQL动态生成:MyBatis的核心之一是SQL动态语句。在XML配置文件或...

    SpringBoot 整合 Redis、mybatis 完整项目源码下载

    SpringBoot 是一个流行的Java开发框架,它简化了创建独立、生产级别的基于Spring的应用程序的流程。Redis 是一个高性能的键值...这个项目源码下载后,开发者可以深入学习和实践这些技术,进一步提高自己的开发能力。

    mybatis3.x源码深度解析与最佳实践.pdf

    为了更好地学习和理解 MyBatis 背后的设计思路,作为高级开发人员,有必要深入研究了解优秀框架的源码,以便更好的借鉴其思想和设计理念。 1. 环境准备 MyBatis 介绍以及框架源码的学习目标:MyBatis 是当前最流行...

    mybatis-plus源码(mybatis-plus-3.5.1.zip)

    此源码包`mybatis-plus-3.5.1.zip`包含了MyBatis-Plus 3.5.1版本的全部源代码,有助于我们深入理解其内部实现机制和工作原理。 MyBatis-Plus的主要功能包括: 1. **CRUD操作**:MyBatis-Plus提供了简化版的CRUD...

    mybatis-3-mybatis-3.5.8.zip源码

    在mybatis-3-mybatis-3.5.8.zip源码中,我们可以深入理解MyBatis的工作原理和设计模式。这个版本的MyBatis包含以下几个主要模块: 1. **SqlSessionFactoryBuilder**: 用于构建SqlSessionFactory,它是MyBatis的核心...

    阿里巴巴P7架构师纯手工打造MyBatis源码——1小时解密底层源码.txt

    ### MyBatis源码解析——由阿里巴巴P7架构师纯手工打造 #### 一、前言 在现代软件开发过程中,持久层框架如MyBatis因其简单易用、灵活高效的特点而受到广泛欢迎。作为一款优秀的Java持久层框架,MyBatis通过SQL...

    mybatis源码

    这个压缩包文件"mybatis-3-master"很可能是MyBatis的源码仓库,包含MyBatis的主要源代码和构建文件。如果你解压并导入到Eclipse中,你可以深入理解MyBatis的工作原理,这对于开发者来说是极其宝贵的资源。 首先,让...

    mybatis demo

    为了运行这个"mybatis demo",开发者需要先确保本地环境已经安装了Maven、Java以及数据库服务器,并根据项目需求配置相应的数据库连接信息。然后,可以通过Maven的`mvn clean install`命令编译项目,最后启动服务...

    SpringBoot+Mybatis整合完整源码

    Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目标是为了简化 Spring 应用的初始搭建以及开发过程。它通过自动配置、起步依赖、内嵌 Servlet 容器等特性,使开发者能够快速创建独立运行的、生产级别的基于 ...

    springMVC+mybatis简单Web项目源码下载

    spring4+mybatis3简单Web项目源码 我的环境:win7 32位,tomcat7+mysql5+eclipse+jdk1.8 请仔细阅读代码中的reademe.txt 代码可以跑通,欢迎下载!如有问题,欢迎指正!

Global site tag (gtag.js) - Google Analytics