![Quarkus实践指南:构建新一代的Kubernetes原生Java微服务](https://wfqqreader-1252317822.image.myqcloud.com/cover/237/40795237/b_40795237.jpg)
第4章 数据持久化开发
4.1 使用Hibernate ORM和JPA实现数据持久化
4.1.1 前期准备
本案例需要使用 PostgreSQL 数据库,安装、部署数据库的方式有两种,第 1 种是通过Docker容器来安装、部署PostgreSQL数据库,第2种是直接在本地安装PostgreSQL数据库并进行基本配置。
1.通过Docker容器来安装、部署
通过Docker容器安装、部署PostgreSQL数据库的命令如下:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_151_1.jpg?sign=1739695354-C9QRDskGP3mTuAcgyiWIwRljXPE0WnZd-0-c6b3ccd22460f67bfc7146243f3eced8)
执行命令后出现如图4-1所示的界面,说明已经成功启动PostgreSQL数据库。
说明:PostgreSQL服务在Docker中的容器名称是quarkus_test,PostgreSQL服务内部建立了一个名称为 quarkus_test 的数据库,用户名为 quarkus_test,密码为 quarkus_test,可从postgres:10.5 容器镜像中获取。内部和外部端口是一致的,都为 PostgreSQL 的标准端口5432。
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_152_1.jpg?sign=1739695354-5nEzbMODD2uJZ1klo8d117aBe8YECqHo-0-807415b9063a546c058ee3eb4951e9c3)
图4-1 使用Docker容器启动PostgreSQL数据库
2.本地直接安装
首先要安装 PostgreSQL 数据库。下载 PostgreSQL 数据库安装文件并进行安装,关于PostgreSQL 数据库的安装步骤就不进行具体说明了。在 PostgreSQL 数据库安装完毕后,要做一些初始化配置。
首先,建立一个登录角色,用户名是 quarkus_test,密码也是 quarkus_test,如图 4-2所示。
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_152_2.jpg?sign=1739695354-S7gs7qEe4y7X88Y5Vl3Xv1ENKeFTLxLe-0-e0a3f54528ee509f06218a16c18d7870)
图4-2 PostgreSQL管理界面的登录角色目录
其次,建立一个名为quarkus_test的数据库,如图4-3所示。
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_153_1.jpg?sign=1739695354-7zqijU1Iy5tk0dgzyGPn6QMt6su6dJz1-0-0627c82742207e3a096e00b4a0915bac)
图4-3 PostgreSQL管理界面的数据库目录
这样就构建了一个基本的数据库开发环境。
4.1.2 案例简介
本案例介绍基于Quarkus 框架实现数据库操作基本功能。该模块以成熟的并且遵循JPA规范的Hibernate框架作为ORM的实现框架。通过阅读和分析在Hibernate框架上实现CRUD等操作(增加、检索、更新、删除等操作)的案例代码,可以理解和掌握 Quarkus 框架的ORM、JPA和Hibernate使用方法。
基础知识:ORM、JPA和Hibernate及其概念。
ORM(Object/Relation Mapping),即对象/关系映射。其核心思想是将关系型数据库表中的记录映射成对象,以对象的形式展现,开发者可以将对数据库的操作转化为对实体对象的操作。
JPA(Java Persistence API)表示JDK 5.0注解或XML描述ORM表的映射关系,并将运行期的实体对象持久化到数据库中。不过JPA只是一个接口规范。
Hibernate 是最流行的 ORM 框架,通过对象关系映射配置,可以完全脱离底层 SQL。同时,它也是通过JPA规范实现的一个轻量级框架。
4.1.3 编写程序代码
编写程序代码有 3种方式。第 1种方式是通过代码 UI来实现的,在 Quarkus 官网的生成代码页面中按照指定步骤生成脚手架代码,然后下载文件,将项目引入 IDE 工具中,最后修改程序源码。
第2种方式是通过mvn来构建程序,通过下面的命令创建Maven项目来实现:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_154_1.jpg?sign=1739695354-DbSGgmAE07V5XRgSykqHYN9pYCmXpVeO-0-4868eba49553da2a72754c37d4afea99)
第3种方式是直接从GitHub上获取代码,可以从GitHub上克隆预先准备好的示例代码:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_154_2.jpg?sign=1739695354-noPPYg33IHyDeNxrFgGXQo7cdgl6MtZY-0-bc18632064a66804861db8bb52de962e)
该程序位于“031-quarkus-sample-orm-hibernate”目录中,是一个Maven工程项目程序。在IDE工具中导入Maven工程项目程序,在pom.xml的<dependencies>下有如下内容:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_154_3.jpg?sign=1739695354-DMG5ah8T4ntIrfA70sIoJyJz33iQk3YJ-0-553e0c75192cee3750a788df61007c6d)
quarkus-hibernate-orm 是 Quarkus 扩展了 Hibernate 的 ORM 服务实现。quarkus-jdbc-postgresql是Quarkus 扩展了PostgreSQL的JDBC接口实现。
quarkus-sample-orm-hibernate 程序的应用架构(如图 4-4 所示)表明,外部访问ProjectResource资源接口,ProjectResource调用ProjectService服务,ProjectService服务调用注入的EntityManager对象并对PostgreSQL数据库执行对象持久化操作。ProjectService服务依赖于Hibernate框架和quarkus-jdbc扩展。
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_155_1.jpg?sign=1739695354-XJZvRaioHfCAX7iPoZREVM4Tkfsgkw7f-0-fc56d4bbae1524ea155258741d5cfc52)
图4-4 quarkus-sample-orm-hibernate程序应用架构图
quarkus-sample-orm-hibernate程序的配置文件和核心类如表4-1所示。
表4-1 quarkus-sample-orm-hibernate程序的配置文件和核心类
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_155_2.jpg?sign=1739695354-N4E9vCLDUP6GrzVDak68Cmiu0ivcLkqW-0-f6b3127cad037a44919fb590dc12eefc)
在该程序中,首先看看配置信息的application.properties文件:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_155_3.jpg?sign=1739695354-MMQb18QGf1ntjiiGbh6G9p0GyrO8JxIJ-0-e2e640605edb40cec992f3fd7d19ba7f)
在application.properties文件中,配置了与数据库连接相关的参数。
(1)db-kind表示连接的数据库是PostgreSQL。
(2)quarkus.datasource.username和quarkus.datasource.password是用户名和密码,即PostgreSQL的登录角色名和密码。
(3)quarkus.datasource.jdbc.url定义了数据库的连接位置信息,其中jdbc:postgresql://localhost/quarkus_test中的quarkus_test是连接PostgreSQL的数据库。
(4)quarkus.hibernate-orm.database.generation=drop-and-create 表示程序启动后会重新创建表并初始化数据。
(5)quarkus.hibernate-orm.sql-load-script=import.sql 的含义是程序启动后会重新创建表并初始化数据需要调用的SQL文件。
下面让我们看看import.sql文件的内容:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_156_1.jpg?sign=1739695354-JBRzc2raEL0pFSj2CtLqyDbRKZzt7WRA-0-7cb9ad9732a4f238acf18d22567b5050)
import.sql主要实现了iiit_projects表的数据初始化工作。
下面讲解quarkus-sample-orm-hibernate程序中的ProjectResource资源类、ProjectService服务类和Project实体类的功能和作用。
1.ProjectResource资源类
用IDE工具打开com.iiit.quarkus.sample.orm.hibernate.ProjectResource类文件,其代码如下:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_156_2.jpg?sign=1739695354-lLutjJw7aC47kfMOOGX0UUTP8z3Wkrm3-0-ae9ea9bc3122fd8556ad6405d7120f17)
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_157_1.jpg?sign=1739695354-1YC7mghFvNrmkGxaceeJ6cFYlxIgRxCh-0-373c57c25c8299bf1815950e783aa794)
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_158_1.jpg?sign=1739695354-qESeQPxo35lR3alWJwxbl1Yy9CYjAT7U-0-ee82938989a6b2205a8693bc48830f98)
程序说明:
① ProjectResource 类主要用于与外部交互,其主要方法是 REST 的基本操作方法,包括GET、POST、PUT和DELETE方法。
②对后台的操作主要是通过注入的ProjectService对象来实现的。
2.ProjectService服务类
用IDE工具打开com.iiit.quarkus.sample.orm.hibernate.ProjectService类文件,其代码如下:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_158_2.jpg?sign=1739695354-o9s7dP7VpbwKUFDlGQxQgcljmLrzHr3a-0-cc30494a237c43427391a4b12ec0cec0)
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_159_1.jpg?sign=1739695354-6xJshuLRtFnE9Xy2uQ9ZGQFTPwxbxXmZ-0-568c4aabc2fa190ad5579cb5ca66bb6a)
程序说明:
① ProjectService 类实现了 JPA 规范下的数据库操作,包括查询、新增、修改和删除等操作。
② ProjectService 类通过注入 EntityManager 对象,实现了后端数据库的 CRUD 操作。EntityManager对象是JPA规范的实体管理器。
③@Transactional注解是方法注解,表明该方法对数据库的操作具有事务性。
3.Project实体类
用IDE工具打开com.iiit.quarkus.sample.orm.hibernate.Project类文件,其代码如下:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_160_1.jpg?sign=1739695354-7mzMa82iG0j2Bv8yhb455z2QDCTl9KGC-0-b02bf79ea2b3cc37173e62793eeb9da4)
程序说明:
①@Entity注解表示Project对象是一个遵循JPA规范的实体对象。
②@Table(name="iiit_projects")注解表示Project对象映射的关系型数据库表是iiit_projects。
③@NamedQuery(name="Projects.findAll",query="SELECT f FROM Project f ORDER BY f.name",hints=@QueryHint(name="org.hibernate.cacheable",value="true"))表示调用Projects.findAll方法时将使用后面的SQL查询语句。
④@Cacheable表明对象采用缓存模式。
该程序动态运行的序列图(如图 4-5 所示,遵循 UML 2.0 规范绘制)描述了外部调用者Actor、ProjectResource、ProjectService和EntityManager等4个对象之间的时间顺序交互关系。
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_161_1.jpg?sign=1739695354-U3XT4r0jRUuEJcfcNGKFVBqfB75OpkPO-0-c7708f36509d76ebd00af52957d55a36)
图4-5 quarkus-sample-orm-hibernate程序动态运行的序列图
该序列图中总共有5个序列,分别介绍如下。
序列 1活动:① 外部调用 ProjectResource资源类的 GET(list)方法;② GET(list)方法调用ProjectService服务类的list方法;③ ProjectService服务类的list方法调用EntityManager的get方法;④返回整个Project列表。
序列2活动:① 外部传入参数ID并调用ProjectResource资源类的GET(getById)方法;② GET(getById)方法调用 ProjectService服务类的 getById方法;③ ProjectService服务类的 getById方法调用 EntityManager的 find方法;④ 返回 Project列表中对应 ID的 Project对象。
序列 3活动:① 外部传入参数 Project对象并调用 ProjectResource资源类的 POST(add)方法;② POST(add)方法调用 ProjectService服务类的 add方法;③ ProjectService服务类的 add方法调用 EntityManager的 persist方法;④ EntityManager的 persist方法实现增加一个 Project对象的操作并返回参数Project对象。
序列4活动:① 外部传入参数Project对象并调用ProjectResource资源类的PUT(update)方法;② PUT(update)方法调用 ProjectService服务类的 update方法;③ ProjectService服务类根据项目名称是否相等来实现修改一个Project对象的操作并调用EntityManager的persist方法;④EntityManager的persist方法实现并返回参数Project对象。
序列 5 活动:① 外部传入参数 Project 对象并调用 ProjectResource 资源类的DELETE(delete)方法;② DELETE(delete)方法调用 ProjectService服务类的 delete方法;③ ProjectService服务类根据项目名称是否相等来实现调用 EntityManager的 remove方法的操作;④EntityManager的remove方法实现删除一个Project对象的操作并返回。
4.1.4 验证程序
通过下列几个步骤(如图4-6所示)来验证案例程序。
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_162_1.jpg?sign=1739695354-n8DhpZqeWP2YXmZ7xshAmlnGSz6lz3DF-0-67f9491a99d2d2fb444513bc1758870d)
图4-6 quarkus-sample-orm-hibernate程序验证流程图
下面对其中涉及的关键点进行说明。
1.启动PostgreSQL数据库
首先要启动 PostgreSQL数据库,然后可以进入 PostgreSQL的图形管理界面并观察数据库中数据的变化情况。
2.启动quarkus-sample-orm-hibernate程序服务
启动程序有两种方式,第 1种是在开发工具(如 Eclipse)中调用 ProjectMain类的 run方法,第2种是在程序目录下直接运行命令mvnw compile quarkus:dev。
3.通过API显示项目的JSON格式内容
在命令行窗口中键入命令curl http://localhost:8080/projects,将返回整个项目列表的项目数据。
4.通过API显示单条记录
在命令行窗口中键入命令curl http://localhost:8080/projects/1,将返回项目1的项目数据。
5.通过API增加一条数据
在命令行窗口中键入如下命令:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_163_1.jpg?sign=1739695354-1A4jpRB1NPDPeetNasA1RtzRWJhLThKZ-0-3d5f5baee8552416233b6c39e0e56ea8)
可采用命令curl http://localhost:8080/projects显示全部内容,观察是否成功增加了数据。6.通过API修改一条数据的内容
在命令行窗口中键入如下命令:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_163_2.jpg?sign=1739695354-4DcukOjBsUgIsR4LVhVgzJYLdhWvVibg-0-873482d81262028b02842967af434628)
可采用命令curl http://localhost:8080/projects/5来查看数据的变化情况。
7.通过API删除project6记录
在命令行窗口中键入如下命令:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_163_3.jpg?sign=1739695354-wHV4CBVqWmUO0U27VmSAdmwngiGpy6Au-0-a076697168a8a4db8d95d6ff614675f8)
命令执行完成后,调用命令curl http://localhost:8080/projects显示该记录,查看变化情况。
4.1.5 其他数据库配置的实现
本案例采用的数据库是PostgreSQL数据库,事实上Quarkus 支持多种数据库。Quarkus 不但可以通过常用方法使用数据源并配置 JDBC驱动程序,还可以采用响应式驱动程序以响应式的方式连接到数据库。针对JDBC驱动程序,首选的数据源和连接池实现是Agroal。而对于响应式驱动,Quarkus 使用 Vert.x响应式驱动程序。Agroal和 Vert.x都可以通过统一、灵活的配置进行协同。
1.Quarkus 中首选的JDBC数据源和连接池实现Agroal
Agroal 是一个现代的、轻量级的连接池实现,可用于高性能和高可伸缩性场景,并可与Quarkus 中的其他组件(如安全性、事务管理、健康度量等组件)集成。数据源配置就是添加Agroal 扩展和 jdbc-db2、jdbc-derby、jdbc-h2、jdbc mariadb、jdbc mssql、jdbc mysql 或 jdbc postgresql 之一。由于默认使用了 Agroal 扩展,配置文件中只需添加数据源即可。配置信息如下:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_164_1.jpg?sign=1739695354-cTieI6VVUFmZ9LMK2VNQnzYqXUPwveMp-0-49c07b9194f4e3f37b1028dfbd8bf805)
例如,要配置的数据源是H2数据库,修改为如下内容即可:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_164_2.jpg?sign=1739695354-8Qp3nzyqae0yNlgphN5gv52tdazRK4wX-0-ead97a46e62bbfc989da3b79e6265058)
2.Quarkus 支持的内置数据库类型
数据库类型配置会定义要连接到的数据库类型。Quarkus 目前支持的内置数据库类型有DB2:db2、Derby:derby、H2:h2、MariaDB:mariadb、Microsoft SQL Server:mssql、MySQL:mysql、PostgreSQL:postgresql、pgsql或pg等。在Quarkus 配置数据库类型时,可以直接使用数据源 JDBC驱动程序扩展并在配置中定义内置数据库类型,Quarkus 会自动解析 JDBC驱动程序。
如果使用的不是上面列出的内置数据库类型的数据库,可使用 other 选项并显式定义JDBC 驱动程序。Quarkus 应用程序在 JVM 模式下可支持任何 JDBC 驱动程序,但不支持将other的JDBC驱动程序编译为原生可执行程序。
在开发数据库程序时,很可能需要定义一些其他配置信息来访问数据库。这需要通过配置数据源的其他属性来实现,如用户名和密码等,相关代码如下:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_164_3.jpg?sign=1739695354-ehAFOkAt5QR9KB0fYEpoXLdLTmM4ZCzm-0-d8f2424877c2e974854d65bf13865262)
Quarkus 还支持从Vault检索密码来配置数据源信息。
3.Quarkus 中JDBC的配置介绍
JDBC 是最常见的数据库连接模式。例如,在使用 Hibernate ORM 时,通常需要一个JDBC 数据源。这就需要将 quarkus agroal 依赖项添加到项目中,可以使用一个简单的 Maven命令进行添加:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_165_1.jpg?sign=1739695354-XCbtHyZ4spK3M2qW7hcGsWFakQwngu4C-0-b56e11ae346b9c64dae186598db22a7d)
Agroal是Hibernate ORM扩展的可传递依赖项。如果使用Hibernate ORM,则不需要显式地添加Agroal扩展依赖项,而只需要为关系型数据库驱动程序选择并添加Quarkus 扩展。
Quarkus 提供的驱动程序扩展有 DB2-jdbc-db2、Derby-jdbc-derby、H2-jdbc-h2、MariaDB-jdbc-mariadb、Microsoft SQL Server-jdbc-mssql、MySQL-jdbc-mysql、PostgreSQL-jdbc-postgresql 等。H2 和 Derby 数据库通常可以配置为以“嵌入式模式”运行。但需要注意,Quaruks扩展不支持将嵌入式数据库引擎编译为原生可执行程序。
使用内置数据源类型之一时,将自动解析 JDBC 驱动程序,它们的映射关系如表4-2所示。
表4-2 数据库类型到JDBC驱动程序的映射
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_165_2.jpg?sign=1739695354-rXRBsaacII6ceQvPIxmyRmC7W279cV1j-0-fab7cb9087abdfb2af6ace76ecc300ca)
如何处理没有内置扩展或使用其他驱动程序的数据库呢?如果需要(例如使用OpenTracing 驱动程序)或希望使用 Quarkus 没有内置 JDBC 驱动程序扩展的数据库,则可以使用特定的驱动程序。如果没有 Quarkus 的驱动扩展,虽然驱动程序可以在任何运行于 JVM模式下的 Quarkus 应用程序中正常工作,但是在将应用程序编译为原生可执行程序时,不会有效实现。若希望生成原生可执行程序,还是建议使用现有的Quarkus 扩展JDBC驱动程序。
下面是使用OpenTracing驱动程序的代码:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_165_3.jpg?sign=1739695354-h68R6txn1kacPha9irjgrQjVFV9IldDe-0-29024dabfed754a48e2195ddfd6a22e7)
针对内置不支持的数据库访问(在JVM模式下数据库为Oracle),可采用如下定义:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_165_4.jpg?sign=1739695354-0T89wSHdSKoa6OFEBHU8gCnch8rQNwSx-0-343ce867639ee1ec85e21f8eb36f7a58)
如果需要在代码中直接访问数据源,则可以通过以下方式注入:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_166_1.jpg?sign=1739695354-GMkR4w7p8V4YEK72iphAptr3Es9CCoPg-0-0e24af60d0ef696b2ab397f408725300)
在上面的示例中,注入类型是 AgroalDataSource,这是 javax.sql.DataSource类型。因此,也可以直接注入javax.sql.DataSource。
4.常用的数据库类型配置方式
每个受支持的数据库都包含不同的JDBC URL配置选项,下面简单列出这些配置选项。(1)H2的配置方式
H2 是一个嵌入式数据库,它可以作为服务器运行,可以存储为文件,也可以完全驻留在内存中。
H2采用以下格式的连接URL:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_166_2.jpg?sign=1739695354-T9Z5gjpehqNAdkUxkhUKltY1S5akdOxT-0-7d31a3cd3726acf2b41526d74c49f5ca)
例子:jdbc:h2:tcp://localhost/~/test,jdbc:h2:mem:myDB。
案例程序“032-quarkus-sample-orm-hibernate-h2”就是H2数据库,可详细了解。
(2)PostgreSQL的配置方式
PostgreSQL只作为服务器运行,下面的其他数据库也是这样。因此,必须指定连接的详细信息或使用默认值。PostgreSQL采用以下格式的连接URL:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_166_3.jpg?sign=1739695354-jQcXmKSHNkbXCIzcBxrwpCTlvhc2Holl-0-91863ced85a0e135b4db0f616f564499)
不同部分的默认值如下:host默认是 localhost,port默认是 5432,database默认与用户名相同。
例子:jdbc:postgresql://localhost/test。
大部分案例程序都采用的是PostgreSQL。
(3)DB2的配置方式
DB2采用以下格式的连接URL:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_166_4.jpg?sign=1739695354-h8xsJzjxep8cgC0DP6xomO9hauk5yeNd-0-ddfd68d09335c7f9df281000a56453fb)
例子:jdbc:db2://localhost:50000/MYDB:user=dbadm;password=dbadm。
(4)MySQL的配置方式
MySQL采用以下格式的连接URL:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_167_1.jpg?sign=1739695354-rtTJnJtcfs6H59Mt1M72G6FswGTml2uD-0-ff17bd1055d616e27cefed2c196c269b)
例子:jdbc:mysql://localhost:3306/test。
(5)Microsoft SQL Server的配置方式
Microsoft SQL Server采用以下格式的连接URL:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_167_2.jpg?sign=1739695354-2AsVXU4Ipl3A1JIX2p4247TFZio4jpLP-0-6eda1b345d05ddab2f2406a2269dcd02)
例子:jdbc:sqlserver://localhost:1433;databaseName=AdventureWorks。
(6)Derby的配置方式
Derby 是一个嵌入式数据库,也可以作为服务器运行,该数据库可以存储为文件,也可以完全驻留在内存中。以下列出了所有相关选项。Derby采用以下格式的连接URL:
![](https://epubservercos.yuewen.com/ADE0E0/21190709301168906/epubprivate/OEBPS/Images/41803_167_3.jpg?sign=1739695354-uv1hTiJP2MwhwzYQWdMlU3Z11kKKZJBh-0-a84d0f608034a07af5d3a37b90e791a8)
例子:jdbc:derby://localhost:1527/myDB,jdbc:derby:memory:myDB;create=true。
其他JDBC驱动程序与上述驱动程序的工作原理相同。
4.1.6 关于其他ORM实现
本案例采用的ORM是支持JPA规范的Hibernate。Quarkus 也支持其他的ORM,国内很多开发者采用 MyBatis作为 ORM框架。虽然现阶段 Quarkus 官方没有公布,但有一些开源爱好者已经在Quarkus 上实现了MyBatis扩展,感兴趣的读者可以上GitHub试用该扩展。