MyBatis 教程

MyBatis 是一款优秀的基于 Java 的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和参数的手动设置以及结果集的检索。

MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object:普通的 Java 对象)映射成数据库中的记录。

MyBatis GitHub 地址: https://github.com/mybatis


1. MyBatis 发展历史

MyBatis 的前身是 iBATIS, 是 Clinton Begin 在 2001 年发起的一个开源项目,最初侧重于密码软件的开发,后来发展成为一款基于 Java 的持久层框架。2004 年,Clinton 将 iBATIS 的名字和源码捐赠给了 Apache 软件基金会,接下来的 6 年中,开源软件世界发生了巨大的变化, 一切开发实践、基础设施、许可,甚至数据库技术都彻底改变了。2010年,核心开发团队决定离开 Apache 软件基金会,井且将 iBATIS 改名为 MyBatis。

2. MyBatis 主要功能

与其他的 ORM (对象关系映射)框架不同,MyBatis 并没有将 Java 对象与数据库表关联起来,而是将 Java 方法与 SQL 语句关联。 MyBatis 允许用户充分利用数据库的各种功能,例如存储过程、视图、各种复杂的查询以及某数据库的专有特性。如果要对遗留数据库、不规范的数 据库进行操作, 或者要完全控制 SQL 的执行, MyBatis 将会是一个不错的选择。

与 JDBC 相比,MyBatis 简化了相关代码,SQL 语句在一行代码中就能执行。MyBatis提供了一个映射引擎,声明式地将 SQL 语句的执行结果与对象树映射起来。通过使用一种内建的类 XML 表达式语言,SQL 语句可以动态生成。

MyBatis 支持声明式数据缓存(declarative data caching)。当一条 SQL 语句被标记为“可缓存”后,首次执行它时从数据库获取的所有数据会被存储在高速缓存中,后面再执行这条语句 时就会从高速缓存中读取结果,而不是再次命中数据库。 MyBatis 提供了默认情况下基于 Java HashMap 的缓存实现,以及用于与 OSCache、 Ehcache、 Hazeleast 和 Memcached 连接的默认连接器,同时还提供了 API 供其他缓存实现使用。

3. MyBatis 优点

  • 简单易学:本身就很小且简单。没有任何第三方依赖,最简安装只需要两个 jar 文件和配置几个 SQL 映射文件。易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
  • 灵活:MyBatis 不会对应用程序或者数据库的现有设计强加任何影响。SQL 写在 XML 文件里,便于统一管理和优化。通过 SQL 语句可以满足操作数据库的所有需求。
  • 解除 sSQL 与程序代码的耦合:通过提供 DAO 层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。SQL 和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象与数据库的 ORM 字段关系映射。
  • 提供对象关系映射标签,支持对象关系组建维护。
  • 提供 XML 标签,支持编写动态 SQL。

4. MyBatis 架构

MyBatis 的功能架构图:

MyBatis 的功能架构

MyBatis 的功能架构分为三层:

  • (1)API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
  • (2)数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
  • (3)基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

5. MyBatis 与 Spring 集成

单独使用 MyBatis 是有很多限制的,比如无法实现跨越多个 session 的事务,而且很多业务系统本来就是使用 Spring 来管理的事务,因此 MyBatis 最好与 Spring 集成起来使用。

下一章:MyBatis 环境搭建

创建 MyBatis 项目,有两种方法:直接导入 jar 包 和 使用 maven 导入。1) 下载 MyBatis jar 包导入项目:要使用 MyBatis,只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。MyBatis jar 包下载地址:https://github.com/mybatis/mybatis-3/releases