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

本文深入讲解了MyBatis框架,一款优秀的持久层解决方案,支持定制化SQL和存储过程。文章详细介绍了MyBatis的体系结构,包括接口层、数据处理层和基础支撑层,以及其工作流程,从配置解析到SQL执行和结果映射。同时,对比了MyBatis与Hibernate的不同之处,强调了MyBatis在SQL控制和查询效率上的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:http://www.work100.net/training/monolithic-frameworks-mybatis.html
更多教程:光束云 - 免费课程

MyBatis 简介

序号文内章节视频
1什么是MyBatis-
2MyBatis体系结构-
3MyBatis的工作流程-
4MyBatis与Hibernate-
5MyBatis的特点-

请参照如上章节导航进行阅读

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 的一些核心对象,比如执行 SQLStatement,结果集 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 简介

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值