MyBatis

基于Java的持久层框架

MyBatis本是 apache 的一个开源项目iBatis,2010年这个项目由apache 软件 foundation迁移到了 谷歌 code,并且改名为MyBatis。2013年11月迁移到 GitHub 。

iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括 SQL Maps和 数据 Access Objects(DAOs)

当前,最新版本是MyBatis 3.5.7 ,其发布时间是2021年4月21日。

简介

MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级 映射 。MyBatis避免了几乎所有的 Java数据库连接 代码和手动设置参数以及获取结果集。MyBatis可以使用简单的 XML 或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Ordinary Java Object,普通的Java对象)映射成数据库中的记录。

背景介绍

MyBatis是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis使用简单的 XML 或注解用于配置和原始 映射 ,将接口和Java的POJOs(Plain Ordinary Java Objects,普通的Java对象)映射成数据库中的记录。

每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。 Sql SessionFactoryBuilder可以从一个 XML 配置文件 或者一个预定义的配置类的实例获得。

用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath 资源 ),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。

特点

总体流程

(1)加载配置并初始化

触发条件:加载 配置文件

(2)接收调用请求

触发条件:调用Mybatis提供的API

传入参数:为SQL的ID和传入参数对象

处理过程:将请求传递给下层的请求处理层进行处理。

(3)处理操作请求

触发条件:API接口层传递请求过来

传入参数:为SQL的ID和传入参数对象

处理过程:

(A)根据SQL的ID查找对应的MappedStatement对象。

(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的 SQL 和执行传入参数。

(C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。

(D)根据MappedStatement对象中的结果 映射 配置对得到的执行结果进行转换处理,并得到最终的处理结果。

(E)释放连接资源。

(4)返回处理结果将最终的处理结果返回。

功能架构

我们把Mybatis的功能架构分为三层:

(1) API 接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。

(2)数据处理层:负责具体的 SQL 查找、SQL解析、SQL执行和执行结果 映射 处理等。它主要的目的是根据调用的请求完成一次数据库操作。

(3)基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和 CPU缓存 处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

框架架构

框架架构讲解:

(1)加载配置:配置来源于两个地方,一处是 配置文件 ,一处是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数 映射 配置、执行的 SQL 、结果映射配置),存储在 内存 中。

(2)SQL解析:当API接口层接收到调用请求时,会接收到传入SQL的ID和传入对象(可以是Map、 javaBean 或者基本数据类型),Mybatis会根据SQL的ID找到对应的MappedStatement,然后根据传入参数对象对MappedStatement进行解析,解析后可以得到最终要执行的SQL语句和参数。

(3)SQL执行:将最终得到的SQL和参数拿到数据库进行执行,得到操作数据库的结果。

(4)结果 映射 :将操作数据库的结果按照映射的配置进行转换,可以转换成HashMap、 JavaBean 或者基本数据类型,并将最终结果返回。

动态SQL

MyBatis最强大的特性之一就是它的动态语句功能。如果您以前有使用 Java数据库连接 或者类似框架的经历,您就会明白把SQL语句条件连接在一起是多么的痛苦,要确保不能忘记空格或者不要在columns列后面省略一个逗号等。动态语句能够完全解决掉这些痛苦。

尽管与动态SQL一起工作不是在开一个party,但是MyBatis确实能通过在任何 映射 SQL语句中使用强大的动态SQL来改进这些状况。动态SQL元素对于任何使用过JSTL或者类似于 XML 之类的文本处理器的人来说,都是非常熟悉的。在上一版本中,需要了解和学习非常多的元素,但在MyBatis3中有了许多的改进,现在只剩下差不多二分之一的元素。MyBatis使用了基于强大的 OGNL 表达式来消除了大部分元素。

集成

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

spring事务配置

copy

1.<!--自动扫描业务包-->

参考资料

  1. MyBatis教程 W3Cschool 2017-08-21