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

原文地址: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 的一些核心对象,比如执行 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 简介

原文地址:https://www.cnblogs.com/liuxiaojun/p/training-monolithic-frameworks-mybatis.html

时间: 2024-11-05 14:40:14

Java单体应用 - 常用框架 - 08.MyBatis的相关文章

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

原文地址:http://www.work100.net/training/monolithic-frameworks-mybatis-druid.html 更多教程:光束云 - 免费课程 Druid 简介 序号 文内章节 视频 1 概述 - 2 各种连接池性能对比测试 - 请参照如上章节导航进行阅读 1.概述 Druid 是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池.插件框架和 SQL 解析器组成. 该项目主要是为了扩展 JDBC 的一些限制,可以让程序员实现一些特殊的需求,比如向密钥

Java单体应用 - 常用框架 - 05.综合实例(iot-admin)

原文地址:http://www.work100.net/training/monolithic-frameworks-example.html更多教程:光束云 - 免费课程 综合实例 序号 文内章节 视频 1 概述 - 2 创建项目 - 3 使用AdminLTE模板 - 4 创建登录页 - 5 登录功能实现 - 6 提升用户体验 - 7 实例源码 - 请参照如上章节导航进行阅读 1.概述 本节将把「Java单体应用」课程做一个阶段性的总结,通过一个综合的案例将所学知识完整实践一下. 我们后续阶段

Java单体应用 - 常用框架 - 02.Spring

原文地址:http://www.work100.net/training/monolithic-frameworks-spring.html更多教程:光束云 - 免费课程 Spring 序号 文内章节 视频 1 概述 - 2 体系结构 - 3 特点 - 4 Spring与IoC - 5 第一个Spring应用程序 - 请参照如上章节导航进行阅读 1.概述 Spring 的主要作用就是为代码"解耦",降低代码间的耦合度. 根据功能的不同,可以将一个系统中的代码分为 主业务逻辑 与 系统级

Java单体应用 - 常用框架 - 07.Spring MVC - Maven 模块化开发(iot-

原文地址:http://www.work100.net/training/monolithic-frameworks-spring-mvc-maven-module.html更多教程:光束云 - 免费课程 Maven 模块化开发 序号 文内章节 视频 1 概述 - 2 创建根项目(工程) - 3 创建统一的依赖管理模块 - 4 创建通用的工具类模块 - 5 创建领域模型模块 - 6 创建管理后台模块 - 7 创建前端控制台模块 - 8 创建接口模块 - 9 清理.编译.打包 - 10 功能完善

Java单体应用 - 常用框架 - 01.Bootstrap

原文地址:http://www.work100.net/training/monolithic-frameworks-bootstrap.html 更多教程:光束云 - 免费课程 Bootstrap 序号 文内章节 视频 1 概述 2 阅读对象 3 前置知识 4 为什么使用Bootstrap 5 Bootstrap包的内容 6 参考资源 请参照如上章节导航进行阅读 1.概述 Bootstrap 来自 Twitter,是目前很受欢迎的前端框架. Bootstrap 是基于 HTML.CSS.Jav

Java单体应用 - 常用框架 - 01.Bootstrap - 媒体查询

原文地址:http://www.work100.net/training/monolithic-frameworks-bootstrap-media.html 更多教程:光束云 - 免费课程 媒体查询 序号 文内章节 视频 1 用法 - 2 浏览器支持 - 3 媒体类型 - 4 媒体特性 - 5 使用媒体查询 - 请参照如上章节导航进行阅读 1.用法 @media 媒体查询能在不同的条件下使用不同的样式,使页面在不同在终端设备下达到不同的渲染效果. 2.浏览器支持 表格中的数字表示支持 @med

Java单体应用 - 常用框架 - 07.Spring MVC - 表单标签库

原文地址:http://www.work100.net/training/monolithic-frameworks-spring-mvc-form-tags.html更多教程:光束云 - 免费课程 表单标签库 序号 文内章节 视频 1 声明表单标签 - 2 表单标签 - 3 文本框 - 4 密码框 - 5 文本域 - 6 复选框 - 7 复选框(多选) - 8 单选按钮 - 9 单选按钮(多选) - 10 下拉列表 - 11 下拉列表(多选) - 12 隐藏域 - 请参照如上章节导航进行阅读

Java单体应用 - 常用框架 - 07.Spring MVC - 其它注解

原文地址:http://www.work100.net/training/monolithic-frameworks-spring-mvc-other-annotation.html更多教程:光束云 - 免费课程 其它注解 序号 文内章节 视频 1 @ModelAttribute - 2 @ResponseBody - 请参照如上章节导航进行阅读 [email protected] @ModelAttribute 具有如下三个作用: 绑定请求参数到命令对象: 放在功能处理方法的入参上时,用于将多

Java单体应用 - 常用框架 - 01.Bootstrap - 表格

原文地址:http://www.work100.net/training/monolithic-frameworks-bootstrap-table.html 更多教程:光束云 - 免费课程 表格 序号 文内章节 视频 1 概述 - 2 表格类 - 3 表格元素类 - 4 基本的表格 - 请参照如上章节导航进行阅读 1.概述 Bootstrap 提供了一个清晰的创建表格的布局.下表列出了 Bootstrap 支持的一些表格元素: 标签 描述 <table> 为表格添加基础样式 <thea