1、简述
Spring Boot 3.2 引入了一系列新特性,其中之一就是 JdbcClient。JdbcClient 是一种轻量级的 JDBC 数据库访问工具,旨在简化与数据库交互的操作。传统的 JDBC 代码通常冗长且容易出错,而 JdbcClient 的目标是通过提供更简洁的 API 来改善开发体验,使得数据库操作变得更加直观和高效。
代码样例:https://gitee.com/lhdxhl/springboot3-example.git
在本文中,我们将深入探讨 Spring Boot 3.2 中的 JdbcClient,介绍其主要功能,并通过示例代码展示如何在实际项目中使用它。
2、配置
SpringBoot 3.2引入了新的 JdbcClient 用于数据库操作,JdbcClient对JdbcTemplate进行了封装,采用了 fluent API 的风格,可以进行链式调用。自此,spring自带的数据库操作有了4种方式:JdbcTemplate、JdbcClient、SpringDataJdbc、SpringDataJpa。
2.1 项目依赖
首先,确保在 Spring Boot 3.2 项目中包含 spring-boot-starter-data-jdbc 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
2.2 配置数据库连接
在 application.properties 中配置数据库连接信息:
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://192.168.245.181:3306/shop_admin?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: shop
password: 123
driver-class-name: com.mysql.cj.jdbc.Driver
3、实践样例
下面是一个简单的示例,展示了如何使用 JdbcClient 进行数据库操作。
3.1 实体类
我们首先定义一个简单的实体类 User:
@Data
public class SysUserEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 用户ID
*/
private Long userId;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 盐
*/
private String salt;
/**
* 邮箱
*/
private String email;
/**
* 手机号
*/
private String mobile;
/**
* 状态 0:禁用 1:正常
*/
private Integer status;
/**
* 创建者ID
*/
private Long createUserId;
/**
* 创建时间
*/
private Date createTime;
}
3.2 配置 JdbcClient
接下来,我们创建一个配置类,用于注入 JdbcClient 实例:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.simple.SimpleJdbcClient;
@Configuration
public class JdbcConfig {
@Bean
public JdbcClient jdbcClient(JdbcTemplate jdbcTemplate) {
return JdbcClient.create(jdbcTemplate);
}
}
3.3 使用 JdbcClient 进行数据库操作
使用 JdbcClient 来实现 CRUD 操作。以下是一个 UserRepository 类的实现示例:
package com.lm.jdbcclient.repository;
import com.lm.jdbcclient.entry.SysUserEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.simple.JdbcClient;
import org.springframework.stereotype.Repository;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
@Repository
public class UserRepository {
@Autowired
private JdbcClient jdbcClient;
private final RowMapper<SysUserEntity> userRowMapper = (ResultSet rs, int rowNum) -> {
SysUserEntity user = new SysUserEntity();
user.setUserId(rs.getLong("user_id"));
user.setUsername(rs.getString("username"));
user.setEmail(rs.getString("email"));
return user;
};
public void createUser(String name, String email) {
jdbcClient.sql("INSERT INTO sys_user (username, email) VALUES (?, ?)")
.param(name)
.param(email)
.update();
}
public SysUserEntity getUserById(Long id) {
return jdbcClient.sql("SELECT * FROM sys_user WHERE user_id = ?")
.param(id)
.query(userRowMapper)
.single();
}
public List<SysUserEntity> getAllUsers() {
return jdbcClient.sql("SELECT * FROM sys_user")
.query(userRowMapper)
.list();
}
public void updateUser(Long id, String name, String email) {
jdbcClient.sql("UPDATE sys_user SET username = ?, email = ? WHERE user_id = ?")
.param(name)
.param(email)
.param(id)
.update();
}
public void deleteUser(Long id) {
jdbcClient.sql("DELETE FROM sys_user WHERE user_id = ?")
.param(id)
.update();
}
}
在这个示例中,JdbcClient 提供了一个简洁的流式 API,方便开发者编写 SQL 操作。通过 param() 方法传递参数,最终通过 update() 或 query() 执行操作。
4、总结
Spring Boot 3.2 中引入的 JdbcClient 是一个强大且易用的数据库访问工具。它通过简化 API、提供流式操作,使得数据库操作更加直观和高效。在实际开发中,JdbcClient 可以替代传统的 JdbcTemplate,为开发者带来更好的开发体验。希望本文对你理解和使用 JdbcClient 有所帮助,并能在你的项目中提升效率。
🔹 简化的 API:JdbcClient 的 API 设计更加直观和简洁,减少了样板代码,使得开发人员可以专注于业务逻辑。
🔹 流式操作:JdbcClient 提供了流式操作,代码可读性高,避免了传统 JDBC 中繁琐的 try-catch-finally 语句。
🔹 更好的参数化支持:JdbcClient 提供了链式的 param() 方法,可以轻松传递参数,避免 SQL 注入风险。
🔹 无缝集成:JdbcClient 与 Spring Boot 的其他组件无缝集成,继承了 Spring 的事务管理功能,使数据库操作更加安全。