JDBCORMMybatis初识
Posted 保护眼睛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBCORMMybatis初识相关的知识,希望对你有一定的参考价值。
JDBC、ORM、Mybatis初识
传统的JDBC操作
Java 语言中对于数据库操作的原始方式,即通过 JDBC 来操作数据库,步骤几乎都比较固定,以下为语法层面的步骤👇
- 创建数据库连接池 DataSource
- 通过 DataSource 获取数据库连接 Connection
- 编写要执行带 ? 占位符的 SQL 语句
- 通过 Connection 及 SQL 创建操作命令对象 Statement
- 替换占位符:指定要替换的数据库字段类型,占位符索引及要替换的值
- 使用 Statement 执行 SQL 语句
- 查询操作:返回结果集 ResultSet ,更新操作:返回更新的数量
- 处理结果集
- 释放资源
👇
JDBC存在的问题
来看👇这是查询的操作
再来看插入的操作👇
再看删除的操作👇
我们可以发现
对于不同业务来说,只有以下部分是不同的:
带占位符的 SQL 语句。
要替换占位符的数据:一般使用 基础数据类型或 Java对象,需要明确替换哪个占位符,哪个值来
替换。
如果是查询,一般会将结果集转换为 Java对象。需要提供转换的 Java类型,及与结果集字段的映射
关系。
除了以上部分,CRUD 操作类型相同时,如都是查询操作,其他的代码都是类似的样板代码。包括:
创建同一个数据库连接池 DataSource
获取数据库连接 Connection
根据 业务SQL 创建操作命令对象 Statement
根据 业务要替换的数据 替换占位符
执行 SQL
处理查询结果集 ResultSet:根据 业务要映射的 Java类型 ,将结果集 ResultSet 的字段转换为
Java对象或对象中的属性。
处理异常
释放资源
可以看出少量的代码真正用于业务功能,大部分的代码都是样板代码。不过,这些样板代码非常重要,
清理资源和处理错误确保了数据访问的健壮性,避免了资源的泄露。
解决方案
要解决以上问题,有以下方案:
- 最简单的,涉及工具类提供统一的功能:获取数据库连接,释放资源。
- 使用模版设计模式,父类的模板方法提供统一的逻辑,子类提供不同实现。但这部分统一代码逻辑
都会比较复杂。- 更进一步的考虑,其实可以通过 AOP 技术,自动的生成代理类,代理类的方法中织入了统一的样
板代码。
基于上面的原因,我们才需要使用框架:框架会采用第三种解决方案,自动的生成样板代码,我们只需
要提供 sql ,要替换占位符的数据,返回结果集要转换的 java 类型。
这就是框架提供的功能:
可以看到,以上两个部分都涉及到对象操作的转换:
传入 Java对象,作为 SQL要替换值的输入数据;
查询操作,提供 Java类型作为结果,作为结果集转换的输出数据
这种框架一般称为 ORM 框架👇
ORM
对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。
简单的说:ORM相当于中继数据。
所谓的 ORM 框架就是一种为了解决面向对象与关系型数据库中数据类型不匹配的技术,它通过描述 Java 对象与数据库表之间的映射关系,自动将 Java 应用程序中的对象持久化到关系型数据库的表中。
ORM 框架是一种数据持久化技术,即在对象模型和关系型数据库之间建立起对应关系,并且提供一种机制,可通过 JavaBean 对象操作数据库表中的数据,如图所示👇
ORM(Object Relational Mapping),即对象关系映射。在面向对象编程语言中,将关系型数据库中的数据与对象建立起映射关系,进而自动的完成数据与对象的互相转换:
- 将输入数据(即传入对象)+SQL 映射成原生 SQL
- 将结果集映射为返回对象,即输出对象
ORM 把数据库映射为对象:
数据库表(table)–> 类(class)
记录(record,行数据)–> 对象(object)
字段(field) --> 对象的属性(attribute)
一般的 ORM 框架,会将数据库模型的每张表都映射为一个 Java 类。
主流的 Java ORM 框架
当前 Java ORM 框架产品有很多,常见的框架有 Hibernate 和 MyBatis,其主要区别如下👇
Mybatis
Mybatis是一种典型的半自动的 ORM 框架,所谓的半自动,是因为还需要手动的写 SQL 语句,再由框
架根据 SQL 及 传入数据来组装为要执行的 SQL。其优点为:
1.因为由程序员自己写 SQL,相对来说学习门槛更低,更容易入门。
2.更方便做 SQL的性能优化及维护。
3.对关系型数据库的模型要求不高,这样在做数据库模型调整时,影响不会太大。适合软件需求变更
比较频繁的系统,因此国内系统大部分都是使用如 Mybatis 这样的半自动 ORM 框架。
缺点:
不能跨数据库,因为写的 SQL 可能存在某数据库特有的语法或关键词
Hibernate
Hibernate是一种典型的全自动 ORM 框架,所谓的全自动,是 SQL 语句都不用在编写,基于框架的
API,可以将对象自动的组装为要执行的 SQL 语句。其优点为:
1.全自动 ORM 框架,自动的组装为 SQL 语句。
2.可以跨数据库,框架提供了多套主流数据库的 SQL 生成规则。
缺点:
学习门槛更高,要学习框架 API 与 SQL 之间的转换关系
对数据库模型依赖非常大,在软件需求变更频繁的系统中,会导致非常难以调整及维护。可能数据
库中随便改一个表或字段的定义,Java代码中要修改几十处。
很难定位问题,也很难进行性能优化:需要精通框架,对数据库模型设计也非常熟悉。
以上是关于JDBCORMMybatis初识的主要内容,如果未能解决你的问题,请参考以下文章