咱们都知道Mybatis
是一个很是小巧灵活的ORM框架,深受国内广大开发者的喜好,咱们知道它的出现某种程度是为了消除全部的JDBC代码和参数的手工设置以及结果集的封装问题;基于这个一点,咱们就能够知道MyBatis
实际上就是对JDBC的封装,因此这节咱们就来看下MyBatis
是怎样对JDBC封装的,从而能够借鉴学习其余优秀框架在解决问题之初从架构设计层面的思考,而后经过执行流程分析,进一步深入理解Mybatis
的工做原理。
sql
首先咱们先来了解下MyBatis
的架构设计
数据库
MyBatis
总共把功能架构分红了四部分:缓存
提供给外部使用的接口API,开发人员经过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理, Mybatis
提供了两种方式服务器
SqlSession
接口中提供的接口方法<T> T selectOne(String statement,Object parameter); <E>List<E> selectList(String statement,Object parameter); int insert(String statement,Object parameter); int update(String statement,Object parameter); int delete(String statement,Object parameter);
数据处理层这部分主要就 JDBC 的核心内容了,包括参数映射、类型转换、SQL 解析、 SQL 执行以及结果的封装,这部份内容就能够理解成 JDBC 的核心内容,这里有几个重要类mybatis
MyBatis支持两种 SQL
解析的方式,一种 xml、一种是注解;两种方式对于一些基础的 CRUD 区别不大,使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句, Java 注解不只力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。所以,若是你须要作一些很复杂的操做,最好用 XML来映射语句架构
这部分主要是框架抽取出来的通用组件包括数据源管理、事务管理、配置加载和缓存处理;为上层的数据处理层提供最基础的支撑app
一般状况下,咱们是会使用 POOLED 的,他能够帮咱们节省不少宝贵的系统资源框架
JDBC
/MANAGED
)它经过一个顶层的 Transaction
接口以及其不一样实现JdbcTransaction
和 ManagedTransaction
来实现对事务的管理∶
JdbcTransaction
ManagedTransaction
对事务的管理,在和 Spring
整合以后,一般会用 Spring
的事务管理器源码分析
这部分是 MyBatis
启动时核心配置文件的方式,严格来讲也能够不算在架构层面,不过MyBatis
也是提供了两种方式,一个是xml的方式,也是用的比较多的,一种是使用 Java API的方式好比在配置环境的时候学习
<?xmL version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <!--省略--> </environment> </environments> </configuration>
Environment environment = new Environment("development",transactionFactory,dataSource); Configuration configuration = new Configuration(environment)) ;
虽然 MyBatis
提供这两种方式,可是通常状况下仍是使用 xml 的比较方便
小结:
这节内容主要从总体架构上分析了 Mybatis
的架构设计,其实是对JDBC的作了一些抽取和封装,主要分红了三层