跳到主要内容
  1. 所有文章/

《Mybatis3源码深度解析》笔记

点击查看笔记列表

MyBatis是一款在持久层使用的SQL映射框架,可以将SQL语句单独写在XML配置文件中,或者使用带有注解的Mapper映射类来完成数据库记录到Java实体的映射。与另一款主流的ORM框架Hibernate不同,MyBatis属于半自动的ORM框架,它虽然不能将不同数据库的影响隔离开,仍然需要自已编写SQL语句,但是可以灵活地控制 SQL语句的构造,将SQL 语句的编写和程序的运行分离开,使用更加便捷。

历史发展 #

MyBatis源于Apache的一个开源项目iBatis。

2002年

ClintonBegin 开发了 iBatis框架,并引入了SQL映射作为持久化层开发的一种方法。

不久后ClintonBegin将iBatis捐献给Apache软件基金会。

2010年

这个项目由Apache迁移到了GoogleCode,并改名为MyBatis。

2013年11月

MyBatis迁移到目前最大的源代码托管平台Github

框架对比 #

目前,Java实现的持久化框架比较多,名气相对较大的有Hibernate、Speedment、SpringDataJPA、ActiveJPA等。总结一下,MyBatis能够流行起来的主要原因有以下几点:

  1. 消除了大量的JDBC余代码,包括参数设置、结果集封装等。
  2. SQL语句可控制,方便查询优化,使用更加灵活。
  3. 学习成本比较低,对于新用户能够快速学习使用。
  4. 提供了与主流IoC框架Spring的集成支持。
  5. 引入缓存机制,提供了与第三方缓存类库的集成支持。

笔记列表 #

Mybatis源码-级联映射和懒加载

·📄 8953 字·🍵 18 分钟
MyBatis其中一个比较强大的功能是支持查询结果级联映射。使用MyBatis级联映射,我们可以很轻松地实现一对多、一对一或者多对多关联查询,甚至可以利用MyBatis提供的级联映射实现懒加载。

Mybatis源码-缓存实现

·📄 3339 字·🍵 7 分钟
MyBatis提供了一级缓存和二级缓存,其中一级缓存基于SqlSession实现,而二级缓存基于Mapper实现。

Mybatis源码-与Spring整合

·📄 5543 字·🍵 12 分钟
Mybatis与Spring整合,主要关键就是修改BeanDefinition生成对应的代理对象。在MapperFactoryBean的getObject()方法中,调用SqISession对象的getMapper()方法返回一个Mapper动态代理对象。

Mybatis源码-动态SQL实现

·📄 9293 字·🍵 19 分钟
动态SQL指的是事先无法预知具体的条件,需要在运行时根据具体的情况动态地生成SQL语句。假设我们有一个获取用户信息查询操作,具体的查询条件是不确定的,取决于Web前端表单提交的数据,可能根据用户的Id进行查询,也可能根据用户手机号或姓名进行查询,还有可能是这几个条件的组合。

Mybatis源码-日志实现

·📄 2512 字·🍵 6 分钟
MyBatis日志模块设计得比较巧妙的一点是当我们未指定使用哪种日志实现时,MyBatis能够按照顺序查找Classpath下的日志框架相关JAR包。如果Classpath 下有对应的日志包,则使用该日志框架打印日志。