10年开发经验程序员一文带你把5种数据库操作框架给直接理解透彻

数据库操作框架
数据库操作框架指的是第三方软件操作数据库的组件工具 。虽然数据库操作框架根据不同的开发语言而有所不同 , 但是它们所要解决的问题是相同的 , 即建立连接、断开连接、发送操作指令(一般是SQL语句)和转换返回结果 。
对于使用Java编写的后端应用程序而言,比较流行的数据库框架有JDBC、JDBC 、、JPA和 。
下面将对这5种数据库操作框架进行介绍和对比 。
1.JDBC
JDBC(Java)是Java操作数据库的基本工具,它为多种数据库提供统一的规范和接口 。通过使用JDBC,Java应用程序可以通过使用相同的接口操作不同的数据库(如MySQL、等) 。但实际上,JDBC不直接与数据库通信,它只是作为Java程序与数据库驱动器之间的桥梁,如图4.72所示 。
图4.72 JDBC的工作原理
说明:数据库驱动器是使用Java编写的组件 , 负责与其对应的数据库通信 。数据库驱动器本身是可以直接使用的,JDBC只是统一了多种驱动器的使用方法 。使用JDBC操作数据库之前,需要手动指定数据库驱动器 。
JDBC可以在任意Java程序中使用,使用JDBC操作数据库如代码4.44所示 。
但是 , 不推荐在后端应用程序中使用JDBC,因为JDBC相当原始,使用者需要编写大量代码以完善对数据库的操作 , 而在后端应用程序当中,使用其他数据库框架的话,则能省去很多代码(如建立连接、断开连接等) 。
代码4.操作数据库的代码
#更新数据
set = where id=id_1

//指定MySQL数据库驱动
Class.(“com.mysql.jdbc.”);
//建立连接
= .(
//数据库连接地址,xxx为具体的数据库名
“jdbc:mysql://ip:port/xxx”,
“”, //用户名
“”); //密码
//编写查询SQL语句,?为占位符 , 后续通过参数替换
= ” * fromwhere key = ?”;
= .();
//替换中的?占位符,1标识第一个占位符
.(1, “王五”);
//执行SQL语句
= .();
//处理查询集合
while(.next()){
//对每条查询结果的处理,根据字段获取值的方法为.(“id”)
}
2.JDBC
JDBC 是针对相关框架(如 Boot、 MVC等)设计的数据库操作框架,是JDBC的上层封装 。通过使用JDBC,开发者不需要关心数据库连接过程(不需要写连接和断开数据库的代码),只需要在后端应用程序的配置文件中配置数据库连接信息即可实现自动连接数据库 。
JDBC只能在使用相关框架的后端应用程序中使用 。JDBC 实现了自动连接和断开数据库 , 省去了JDBC中手动连接和断开数据库的麻烦 。
与数据库通信方面 , JDBC 保持了SQL语句的方式,但简化了JDBC的调用方式,如代码4.45所示 。
代码4. 操作数据库的代码
//编写查询SQL语句,?为占位符,后续通过参数替换
=” * fromwhere key_1 = ? and key_2 = ?”;
//执行SQL语句
List list = .(, “王五” , “50”);
//处理查询集合
for (int i = 0; i < list.size(); i++) {
//转换每条结果的数据类型
Map= (Map) list.get(i);
… //处理每条结果
}
3.
是一个高度自动化的数据库操作框架 , 是JDBC的上层封装 。通过使用 , 数据库中的表可以映射成Java的类,如代码4.46所示 。开发者只需要使用这些映射的类就可以操作数据库(自动生成SQL语句),如代码4.47所示 。
说明:根据数据库的表映射成的Java类被称为(实体)模型,使用的话,需要为每个需要操作的表都建立对应的模型 。
模型可以使用相关工具自动生成,不需要手动填写 。
代码4.46数据库映射的Java类
//映射数据库的user表,表中有id和info两个字段
@
@Table(name=”user”)
class User {
@Id
@(=.)
@(name=”id”, =true, =false) Long id;
@(name=”info”)
info;
Long getId() {
id;
}
void setId(Long id) {
this.id = id;
}
() {
info;
}
void ( info) {
= info;
}
}
代码4.操作数据库的代码
//获取数据库连接的,此处的有别于4.3.4小节中的
= .();
//编写查询HQL语句,?为占位符,后续通过参数替换
= “fromwhere key_1 = ?”;
Query query= .(hql);
query.(0, “王五”);
//获取结果
List= query.list();
//处理查询结果
for (int i = 0; i < list.size(); i++) {
//把每条结果转换成对应的Java对象,其中User为代码4.45中定义的数据库映射成的
Java类
User user = (User) list.get(i);
… //处理每条结果
}
可以在任意Java程序中使用 。可以自动连接和断开数据库(通过XML配置文件设置) 。在与数据库通信方面,可以根据映射关系自动生成SQL语句 。为了增加自动生成的SQL语句的灵活性,提供了HQL( Query )语句 。HQL语法与SQL类似,但功能上没有SQL健全 。这种“自动生成SQL语句”的做法其实是为了节省学习SQL的时间oracle数据库安装说明oracle数据库安装说明,并且希望以面向对象的编程思想使用数据库 。但是在实际编程当中,部分操作只能通过SQL语句实现(不能完全脱离SQL语句),而且当需要操作的数据表较多时,映射关系也会很复杂 。因此,目前的热度正在慢慢减退 。
说明:类似于这种把关系型数据库中的表映射成Java类的数据库操作框架,被称为ORM框架(,对象-关系映射) 。比较流行的ORM框架有、等 。
4.JPA
JPA(JavaAPI,Java持久层API)是ORM框架的统一规范,为多个ORM框架提供统一的使用接口 。使用JPA的好处是,可以自由切换ORM框架而不影响代码 。JPA与ORM框架的关系如图4.73所示 。需要注意的是 , 在使用JPA之前,需要指定具体ORM框架和数据库驱动 。
图4.73 JPA内部结构

10年开发经验程序员一文带你把5种数据库操作框架给直接理解透彻

文章插图
10年开发经验程序员一文带你把5种数据库操作框架给直接理解透彻

文章插图
5.
是一个不完全的ORM框架,是JDBC的上层封装 。也需要把数据库中的表映射成Java类,但是它不会根据Java对象自动生成SQL语句 。使用作为数据库操作框架的话,开发者需要编写SQL语句模板,会根据指定的SQL语句模板和Java对象生成对应的SQL语句,如代码4.48所示 。
代码4.操作数据库的代码
@
{
//定义SQL模板 , 其中#{}为待替换的参数@(” * fromwhere key_1 = #{} and key_2 =
#{}”)
//定义操作函数,函数被调用后,会自动把参数填充到SQL模板并执行SQL语句,然后返回
结果 , 返回类型User为代码4.46中定义的数据库映射成的Java类
List (@Param(“”), @Param(“”)
);
}
//下面是调用上述查询操作的示例
List= .(“王五”, “0”);
//处理查询结果
for (int i = 0; i < list.size(); i++) {
//把每条结果转换成对应的Java对象 , 其中User为代码4.46中定义的数据库映射成的
Java类
User user = list.get(i);
… //处理每条结果
}
可以在任意Java程序中使用 。的出现 , 保持了ORM框架“以面向对象编程思想使用数据库”的同时,也避免了由于全自动生成SQL语句造成的局限 。
6.数据库操作框架的选择
对于使用Java编写的后端应用程序而言,数据库框架一般是在、JPA(或等ORM框架)和中做出选择 。而这三类数据库操作框架的主要区别在于SQL构造和返回结果转换的方式上,而这些方式本身是很难辨出孰优孰劣的,因此 , 只需要根据团队的使用习惯或偏好来选择数据库操作框架就可以了 。
7. Boot中使用数据库框架的具体方法
这里以JDBC 为例,介绍在 Boot中使用数据库框架的具体方法 。在 Boot中使用JDBC 需要三步,即引入JDBC 的依赖包、配置数据库信息和在代码中使用JDBC 操作数据库 。
(1)引入JDBC 的依赖包 。需要在工程配置文件(build.)中添加JDBC 的依赖包,如代码4.49所示 。
代码4.49在build.中添加JDBC 依赖包…
{

//在中添加JDBC 的依赖包
'org..boot:-boot–jdbc'
'com.:druid:1.0.26' //数据库连接池依赖
'mysql:mysql–java' //MySQL驱动依赖

}

添加完依赖包之后,需要同步工程配置 。JDBC 的依赖包在同步工程配置后才会被下载和引入 。在 IDEA中 , 只需要单击“同步”按钮即可同步工程配置,如图4.74所示 。
图4.74 在 IDEA中同步build.配置
(2)配置数据库信息 。配置数据库连接信息需要在后端应用程序的配置文件(默认是.)中设置,如代码4.50所示 , 其中,连接池的具体设置需要根据实际情况而定 。
说明:频繁地建立和断开数据库连接是很耗资源的,连接池的作用是避免频繁创建和释放连接引起的大量性能开销 。
代码4.50在配置文件中添加数据库连接信息…
#设置数据库连接地址 , xxx为具体的数据库名
..jdbc-url=jdbc:mysql://ip:port/xxx
#设置用户名
..=root
#设置密码
..=
#指定MySQL数据库驱动
..-class-name=com.mysql.cj.jdbc.
#设置数据库连接池,type为指定连接池的包,max-为最大激活连接数,max-idle为
最大等待连接的数量,-size为初始状态下建立的连接数
..type=com..druid.pool.
..max-=20
..max-idle=8
..-size=10

(3)使用JDBC 操作数据库的代码一般在Dao层中 , 具体代码如代码4.51所示 。
代码4.51通过JDBC 操作数据库
com..demo.dao;
//引用的类
org..jdbc.core.;
… //省略其他引用的类
@(“”)
class{
//获取对象,此对象会被自动注入
@
;
( ,){
try{
//SQL语句 , ?为占位符,后续通过参数替换
= ” INTO(?, ?)”;
//执行SQL语句
int= .(, , );
if( > 0){
“”;
}else {
“fail”;
}
}catch( e){
“fail”;}
}
List get( key){
List= new List();
try{
//SQL语句,?为占位符,后续通过参数替换
=” * FROMWHERE key_1 = ? and key_2
= ?”;
//执行SQL语句
= .(, “王五” , “50”);
}catch( e){
//失败
}
;
}
}
本文给大家讲解的内容是大型网站架构的技术细节:后端架构数据库–数据库操作框架下篇文章给大家讲解的内容是大型网站架构的技术细节:后端架构数据库-数据库事务感谢大家的支持!
【10年开发经验程序员一文带你把5种数据库操作框架给直接理解透彻】本文到此结束,希望对大家有所帮助 。