Mybatis介绍
Mybatis是轻量级的java持久层中间件,完全基于JDBC实现持久层的数据访问,支持以xml和注解的形式进行配置,能灵活、简单的进行sql映射,也提供了比jdbc更丰富的结果集,应用程序可以从中选择对自己的数据更友好的结果集。
一、Mybatis的历史
Mybatis的前身为iBatis。iBatis是由Clinton Begin在2001年发起的开源项目,在2002年被捐献给Apache软件基金会,在之后的6年中,iBatis在方法论、源码管理、社交、开源基础建设等方面都取得了很大的进步。2010年5月21日,iBatis项目组将iBatis更名为Mybatis,并搬运到Google Code继续开发。稳定性得到很大提升。2010年6月16日,MyBatis项目被正式归入Apache Attic,属性变为“只读”,这意味着该项目在iBatis时代正式结束。为了让更多的人参与到项目中,2013年11月10日,MyBatis项目被迁移至GitHub。
二、MyBatis的自身定位
MyBatis从创建到现在,一直秉持着小而精的聚焦理念,这使其做到定位准确、轻量化、运行稳定和便于集成、并因此得到广泛应用。
(1)JPA持久化框架
JPA是JCP组织对Java持久化数据访问的统一定义,是javaEE的标准之一,最早在JSR-220中被定义,后来作为独立的JSR规范被上升为javaSE标准。
JPA提供了一套object/relational映射机制,JAVA开发者只需对JPA编程,再选择一种第三方的JPA实现包集成到应用中,便能够通过JPA管理java应用的关系型数据。所有JPA的实现都需要包含以下元素:
一套持久化API:一套便捷的API能实现关系型对象的持久化。
一套查询语句:不对sql语句编程,完全面向对象编程。
ORM元数据管理:提供XML和Annotation形式的元数据配置。
典型的JPA 实现有Hiberbate、Toplink、OpenJPA、Spring Data JPA等。
(2)MyBatis的功能
开发者可以使用MyBatis灵活多样的配置功能将应用程序中的sql在执行前配置好。所有的sql都被放到统一的位置,这样既方便查找,又增强了可维护性。
MyBatis也向开发者提供了统一的sql执行方法,并且支持丰富的扩展定制来满足开发者的个性化需求。尽管大部分公司都会通过某种模版方法来简化JDBC访问,但事实证明MyBatis在这方面做得更好。
(3)Mybatis与JPA的异同
MyBatis从sql角度切入来解释对关系型数据库的使用,重点解决Java数据访问与关系型数据库的sql不一致的问题。
JPA更偏向实体与关系,旨在解决Java面向对象与关系型数据库实体关系理念一致但访问接口不一致的问题。
二者虽然都向应用程序提供了相似的访问方法,但出发点有所差异,我们在使用过程中会深刻体会到二者在设计理念上的不同。
三、MyBatis架构
采用了MyBatis的程序的架构体系主要包含了一下内容:
(1)Ibatis-spring:在实际项目中,大部分应用都将spring作为对象容器,开发者除了可以使用原生的MyBatis提供的接入方法,也可以使用MyBatis团队开发的支持spring环境的集成工具。该项目提供了标准的模板接口、事务支持和便捷的注册映射器。
(2)应用程序接口:包装了常用的sql访问方法,向应用程序提供统一的访问接口。
(3)构造器(Builder):MyBatis运行环境的初始化构建器,负责构建配置信息及sql映射关系,使用解析器解析配置,支持以XML和注解的形式进行配置。
(4)执行器(Executor):提供了标准的sql访问接口,支持缓存、动态sql等高级特性。
(5)配置(Configuration):MyBatis运行时所有上下文信息,是整个MyBatis的核心。构建器最终用于构造Configuration类的对象,执行器运行过程中的所有配置、变量和构造工厂都在配置模块中。
(6)spring-tx:在与spring集成的情况下,MyBatis委托spring来管理将要执行的底层JDBC对象、自身的构建器和执行器的生命周期。
(7)jdbc:与数据库交互的JDBC接口、驱动。