JAVA:Spring Boot3 集成 JdbcClient 实现数据访问

admin
2
2025-09-22

1、简述

Spring Boot 3.2 引入了一系列新特性,其中之一就是 JdbcClient。JdbcClient 是一种轻量级的 JDBC 数据库访问工具,旨在简化与数据库交互的操作。传统的 JDBC 代码通常冗长且容易出错,而 JdbcClient 的目标是通过提供更简洁的 API 来改善开发体验,使得数据库操作变得更加直观和高效。

代码样例:https://gitee.com/lhdxhl/springboot3-example.git

在本文中,我们将深入探讨 Spring Boot 3.2 中的 JdbcClient,介绍其主要功能,并通过示例代码展示如何在实际项目中使用它。

image-suhu.png


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 的事务管理功能,使数据库操作更加安全。

动物装饰