原文地址:http://www.work100.net/training/monolithic-frameworks-mybatis.html
更多教程:光束云 - 免费课程
MyBatis 简介
序号 | 文内章节 | 视频 |
---|---|---|
1 | 什么是MyBatis | - |
2 | MyBatis体系结构 | - |
3 | MyBatis的工作流程 | - |
4 | MyBatis与Hibernate | - |
5 | MyBatis的特点 | - |
请参照如上章节导航
进行阅读
1.什么是MyBatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
MyBatis 内部封装了 JDBC,使开发者只需关注 SQL 语句本身,而不用再花费精力去处理诸如注册驱动
、创建 Connection
、配置 Statement
等繁杂过程。
Mybatis 通过 xml
或注解
的方式将要执行的各种 Statement(Statement、PreparedStatement 等)配置起来,并通过 Java 对象和 Statement 中 SQL 的动态参数进行映射生成最终执行的 SQL 语句,最后由 MyBatis 框架执行 SQL 并将结果映射成 Java 对象并返回。
2.MyBatis体系结构
接口层
提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
数据处理层
负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
基础支撑层
负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
3.MyBatis的工作流程
首先在 MyBatis 启动的时候我们需要去解析配置文件,包括全局配置文件( mybatis-config.xml
)以及映射器配置文件,这里面包含了我们怎么控制 MyBatis 的行为和我们要对数据库下达的指令,也就是我们的 SQL
的信息,我们会把这些信息解析成一个 Configuration
对象。
接下来就是我们操作数据库的接口,它在应用程序和数据库中间,代表我们和数据库之间的一次连接,这个就是 SqlSession
对象。
我们要获得一个会话,必须有一个会话工厂 SqlSessionFactory
,SqlSessionFactory 中又必须包含我们所有的配置信息,所以 MyBatis 通过一个 builder
来创建 SqlSessionFactory。
我们知道 MyBatis 是对 JDBC
的封装,也就意味着底层一定会出现 JDBC 的一些核心对象,比如执行 SQL
的 Statement
,结果集 ResultSet
。
在 MyBatis 里面,SqlSession
只是提供给应用的一个接口,还不是 SQL 的真正执行对象。
通过代码中可以看到,SqlSession 中持有一个 Executor
对象,用来封装对数据库的操作。
在执行器 Executor 执行 query
或者 update
操作的时候,我们会创建一系列的对象来处理参数,执行 SQL,处理结果集。
我们可以简化成一个 StatementHandler
对象,下面是 MyBatis 的主要流程图:
SqlSessionFactoryBuilder
每一个 MyBatis 的应用程序的入口是 SqlSessionFactoryBuilder
,它的作用是通过XML配置文件创建 Configuration
对象(当然也可以在程序中自行创建),然后通过 build
方法创建 SqlSessionFactory
对象。
没有必要每次访问 Mybatis 就创建一次 SqlSessionFactoryBuilder
,通常的做法是创建一个全局的对象就可以了。
SqlSessionFactory
SqlSessionFactory
对象由 SqlSessionFactoryBuilder
创建。
它的主要功能是创建 SqlSession
对象,和 SqlSessionFactoryBuilder
对象一样,没有必要每次访问 Mybatis 就创建一次 SqlSessionFactory
,通常的做法是创建一个全局的对象就可以了。
SqlSessionFactory
对象一个必要的属性是 Configuration
对象,它是保存 Mybatis 全局配置的一个配置对象,通常由 SqlSessionFactoryBuilder
从 XML 配置文件创建。
SqlSession
SqlSession
对象的主要功能是完成一次数据库的访问和结果的映射,它类似于数据库的 session
概念,由于不是线程安全的,所以 SqlSession
对象的作用域需限制方法内。
SqlSession
的默认实现类是 DefaultSqlSession
,它有两个必须配置的属性:
- Configuration
- Executor
Executor
Executor
对象在创建 Configuration
对象的时候创建,并且缓存在 Configuration
对象里。
Executor
对象的主要功能是调用 StatementHandler
访问数据库,并将查询结果存入缓存中(如果配置了缓存的话)。
StatementHandler
StatementHandler
是真正访问数据库的地方,并调用 ResultSetHandler
处理查询结果。
ResultSetHandler
处理查询结果。
4.MyBatis与Hibernate
区分 | 数据库封装机制(ORM) | 说明 |
---|---|---|
Hibernate |
全自动 |
实现了 POJO 和数据库表之间的映射,以及 SQL 的自动生成和执行。 |
MyBatis |
半自动 |
其着力点,是在 POJO 类与 SQL 语句之间的映射关系。 |
也就是说,MyBatis 并不会为程序员自动生成 SQL 语句。
具体的 SQL 需要程序员自己编写,然后通过 SQL 语句映射文件,将 SQL 所需的参数,以及返回的结果字段映射到指定 POJO。
因此,MyBatis 成为了“全自动”ORM 的一种有益补充。
5.MyBatis的特点
- 在 XML 文件中配置 SQL 语句,实现了 SQL 语句与代码的分离,给程序的维护带来了很大便利。
- 因为需要程序员自己去编写 SQL 语句,程序员可以结合数据库自身的特点灵活控制 SQL 语句,因此能够实现比 Hibernate 等全自动 ORM 框架更高的查询效率,能够完成复杂查询。
- 简单,易于学习,易于使用,上手快。
上一篇:Spring MVC
下一篇:Druid 简介
如果对课程内容感兴趣,可以扫码关注我们的
公众号
或QQ群
,及时关注我们的课程更新