JdbcClient与JdbcTemplate比较
Spring 框架提供了几种不同的数据库访问方法,其中有可直接执行SQL的统一API,这种方法的关键组件包括JdbcTemplate、NamedParameterJdbcTemplate和JdbcClient。
从Spring 6.1开始提供了JdbcClient,它为 JDBC 查询和更新操作也提供了统一的客户端 API,提供了更加流畅和简化的交互模型。
都是基于SQL的JDBC执行器,两者有啥区别?
JdbcTemplate
JdbcTemplate是 Spring Data 中的核心类,它简化了 JDBC 的使用,并消除了与传统 JDBC 使用相关的许多样板代码。它提供了执行 SQL 查询、更新和存储过程的方法。
它具有以下特点:
- 执行 SQL 查询、更新和存储过程。
- 使用“?”的参数化查询 占位符。
- 通过RowMapper或ResultSetExtractor进行行映射。
代码:
public int getCountOfUsers(String name) { |
以下是使用JdbcTemplate实现CRUD代码:
@Service |
JdbcTemplate中的每个查询方法都需要一个行映射器RowMapper来将数据库表中的列映射到记录Post,这可能是一项相当艰巨的任务。如上述代码中的:
RowMapper<Post> rowMapper = (rs, rowNum) -> new Post( |
JdbcClient
JdbcClient是 Spring 6.1 中引入的增强且统一的 JDBC 客户端 API,为命名和位置参数语句提供流畅的交互模型。它旨在进一步简化 JDBC 操作。
它具有以下特点:
- 对命名参数和位置参数的统一支持。
- 旨在进一步简化 JDBC 操作。
- 作为不断发展的 Spring 框架的一部分引入。
代码:
public int getCountOfUsers(String name) { |
与 JdbcTemplate相比,JdbcClient的接口更简洁、更易读,使代码编写更流畅、更直观。
如果要获取一个 JDBC 客户端实例。Spring Boot 3.2 的自动配置 JDBC 客户端也会交给我们,下面是CRUD代码:
@Service |
与JdbcTemplate相比,JdbcClient没有RowMapper,节省了数据库表字段核对象字段之间手工编程的繁杂任务。
总之,Spring Framework 6.1 和 Spring Boot 3.2 中新引入的 JDBC 客户端提高了编程效率,节省了编程时间。