Java单体应用 - 常用框架 - 08.MyBatis-阿里云开发者社区

开发者社区> 开发与运维> 正文

Java单体应用 - 常用框架 - 08.MyBatis

简介: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。 MyBatis 内部封装了 JDBC,使开发者只需关注 SQL 语句本身,而不用再花费精力去处理诸如注册驱动、创建 Connection、配置 Statement 等繁杂过程。

原文地址: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执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

基础支撑层

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

mybatis-structure.jpg

3.MyBatis的工作流程

首先在 MyBatis 启动的时候我们需要去解析配置文件,包括全局配置文件( mybatis-config.xml )以及映射器配置文件,这里面包含了我们怎么控制 MyBatis 的行为和我们要对数据库下达的指令,也就是我们的 SQL 的信息,我们会把这些信息解析成一个 Configuration 对象。

接下来就是我们操作数据库的接口,它在应用程序和数据库中间,代表我们和数据库之间的一次连接,这个就是 SqlSession 对象。

我们要获得一个会话,必须有一个会话工厂 SqlSessionFactory,SqlSessionFactory 中又必须包含我们所有的配置信息,所以 MyBatis 通过一个 builder 来创建 SqlSessionFactory。

我们知道 MyBatis 是对 JDBC 的封装,也就意味着底层一定会出现 JDBC 的一些核心对象,比如执行 SQLStatement,结果集 ResultSet
在 MyBatis 里面,SqlSession 只是提供给应用的一个接口,还不是 SQL 的真正执行对象。

通过代码中可以看到,SqlSession 中持有一个 Executor 对象,用来封装对数据库的操作。
在执行器 Executor 执行 query 或者 update 操作的时候,我们会创建一系列的对象来处理参数,执行 SQL,处理结果集。
我们可以简化成一个 StatementHandler 对象,下面是 MyBatis 的主要流程图:

mybatis-execute-flow.jpg

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 框架更高的查询效率,能够完成复杂查询。
  • 简单,易于学习,易于使用,上手快。

mybatis-framework.jpg


上一篇:Spring MVC

下一篇:Druid 简介


如果对课程内容感兴趣,可以扫码关注我们的 公众号QQ群,及时关注我们的课程更新

wechat_dingyuehao.jpg
qq_group_qrcode.jpg

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

集结各类场景实战经验,助你开发运维畅行无忧

其他文章