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

💡 原文中文,约2000字,阅读约需5分钟。
📝

内容提要

这个开源项目是Spring 6.1.x中提供的新的Spring JDBC客户端(JdbcClient),它提供了一个出色的流畅接口作为使用JDBC的高级抽象。新的JdbcClient接口为查询/更新语句提供了统一的界面,并提供了灵活的字段映射支持。此外,还新增了SimplePropertyRowMapper,用于将记录转换为指定映射目标类的新实例。该项目还提供了一个完整的代码示例,需要连接到Oracle数据库实例并执行DDL脚本来创建表。

🔎

延伸解读

JdbcClient 的定位与价值

JdbcClient 是 Spring 6.1.x 引入的新 JDBC 客户端,位于 org.springframework.jdbc.core.simple 包下。它通过流畅接口为查询和更新语句提供统一界面,简化了 JDBC 操作。其底层将方法调用委托给 JdbcTemplate 和 NamedParameterJdbcTemplate,因此开发者可以沿用现有配置,同时获得更简洁的 API。对于习惯 JdbcTemplate 的团队,JdbcClient 是一个平滑的升级选项。

灵活映射与 SimplePropertyRowMapper

JdbcClient 的 StatementSpec 接口新增了重载的 query(Class) 方法,支持直接将结果映射到指定类。例如,query(Employee.class).list() 可返回 Employee 列表。同时引入的 SimplePropertyRowMapper 能将记录转换为目标类的新实例,作为自定义 RowMapper 的替代方案。这减少了手动映射的样板代码,但需注意字段名与属性名匹配,否则映射可能失败。

示例运行的前置条件

文章提供的完整代码示例需要连接 Oracle 数据库实例,并执行 DDL 脚本创建 employee 表。脚本包含建表语句和插入示例数据的 INSERT 语句。此外,需修改 pom.xml,将 Oracle JDBC JAR 配置替换为包含最新版 Oracle JDBC 驱动程序的 Maven 依赖。运行前请确保数据库可用,并使用 SQL 工具(如 Oracle SQL Developer)执行脚本。

❓

Q&A

Spring 6.1.x 中新增的 JdbcClient 是什么?

JdbcClient 是 Spring 6.1.x 中新增的 Spring JDBC 客户端,它提供了一个流畅接口作为使用 JDBC 的高级抽象,为查询/更新语句提供了统一的界面。

JdbcClient 如何实现灵活的字段映射?

JdbcClient 通过新增的 SimplePropertyRowMapper 实现灵活的字段映射,该 RowMapper 实现可将记录转换为指定映射目标类的新实例。此外,JdbcClient.StatementSpec 接口新增了重载的 query(Class) 方法,支持直接映射到类。

JdbcClient 底层是如何工作的?

JdbcClient 在幕后将方法调用委托给 JdbcTemplate 和 NamedParameterJdbcTemplate,作为底层实现的门面。

如何使用 JdbcClient 查询所有员工?

可以使用 jdbcClient.sql(EmployeeSqlStatements.FIND_ALL_EMPLOYEES.statement()).query(Employee.class).list() 来查询所有员工,返回 List<Employee>。

如何根据 ID 查询员工?

可以使用 jdbcClient.sql(EmployeeSqlStatements.FIND_EMPLOYEE_BY_ID.statement()).param(id, id).query(Employee.class).optional() 来根据 ID 查询员工,返回 Optional<Employee>。

运行示例前需要做哪些数据库准备工作?

需要连接到 Oracle 数据库实例,并执行 DDL 脚本创建 employee 表,同时插入示例数据。DDL 脚本包括创建表和插入多条员工记录。

🏷️

标签

➡️

继续阅读