基于Oracle Database 23c和UCP的新Spring JDBC客户端源码配置


这个开源项目是Spring 6.1.x中提供了新的 Spring JDBC 客户端 ( JdbcClient ),点击标题

这个案例展示了 Spring 6.1.x 中提供的新 Spring JDBC 客户端 (JdbcClient)。它是对框架的一个有趣的补充,因为它提供了一个出色的流畅接口作为使用 JDBC 的高级抽象。

鉴于其优雅的 JDBC 方法,作为 Java 开发人员,了解其详细信息是很有趣的,因为它为 Java 开发人员提供了开箱即用的 Java 流畅接口。

新的 JdbcClient
新的 JdbcClient(org.springframework.jdbc.core.simple.JdbcClient)接口为带有多个参数和结果检索选项的查询/更新语句提供了统一的界面。

有趣的是,由新 JdbcClient 接口嵌套的 JdbcClient.StatementSpec 接口现在有了一个新的重载 query(Class) 方法,可在 Spring 6.1 中提供灵活的字段映射支持。

以 Employee 类为例,query(Class) 方法的用法最终如下图所示。

 public List<Employee> findAll() {
  return jdbcClient.sql(EmployeeSqlStatements.FIND_ALL_EMPLOYEES.statement())
  .query(Employee.class).list();
 }

为了支持它,还新增了 SimplePropertyRowMapper,这是一种 RowMapper 实现,可将记录转换为指定映射目标类的新实例,作为指定 RowMapper 自定义实现的替代方法。

在幕后,JdbClient 将方法调用委托给 Java 类 JdbcTemplate 和 NamedParameterJdbcTemplate。

下面是另一个更详细查询的示例,它说明了作为底层实现的门面的流畅接口。

 public Optional<Employee> findById(String id) {  
  return jdbcClient.sql(EmployeeSqlStatements.FIND_EMPLOYEE_BY_ID.statement())
  .param(id, id).query(Employee.class).optional();
 }


一个完整的代码示例。

注意:
修改pom.xml文件,将 Oracle JDBC JAR 配置替换为包含所需Oracle JDBC 驱动程序最新版本的配置作为 Maven 依赖项

连接到您的 Oracle 数据库实例并运行 DDL 脚本
现在,您必须连接到 Oracle 数据库实例并执行DDL 脚本来为我们的示例 Spring Boot 应用程序创建表。
打开您喜欢的 SQL 工具,例如新的Oracle SQL Developer Extension for VSCodeOracle SQL Developer工具,复制 DDL 脚本并按预期执行。

CREATE TABLE employee
 (id NUMBER(10) CONSTRAINT pk_employee PRIMARY KEY,
 name VARCHAR2(20),
 role VARCHAR2(20), 
 salary NUMBER(10),
 commission NUMBER(10));
COMMIT;

INSERT INTO employee VALUES(7520,'KARL','DEVELOPER',8500,500);
INSERT INTO employee VALUES(7521,'JEFF','SALESMAN',25000,500);
INSERT INTO employee VALUES(7522,'JOHN','ARCHITECT',9500,500);
INSERT INTO employee VALUES(7523,'PETER','SRE',7000,500);
INSERT INTO employee VALUES(7524,'TODD','DBA',11000,500);
INSERT INTO employee VALUES(7525,'MARK','ENGINEER',9000,500);
INSERT INTO employee VALUES(7526,'LUKE','PM',10000,500);
INSERT INTO employee VALUES(7527,'ERIC','DIRECTOR',20000,500);
COMMIT;