news 2026/5/8 4:38:39

Spring 6.1新核心:JdbcClient,统一JdbcTemplate两套API的终极方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring 6.1新核心:JdbcClient,统一JdbcTemplate两套API的终极方案

01 引言

企业中直接使用JDBC的进行CRUD操作的可能比较少,但是很多框架底层或者测试的时候可能用的比较多,因为Spring官方自带,注入可以直接使用,无需三方依赖。

因为直接使用的比较少,所以关注的人可能不是很多。在浏览Spring Framework时,发现了新的JDBC客户端,函数式操作CRUD相当丝滑,整理一下分享给大家。

02 JDBC客户端

在介绍JdbcClient客户端之前,我们先来了解一下老牌的客户端:

  • JdbcTemplate
  • NamedParameterJdbcTemplate

JdbcTemplateSpring 1.0的时候引入的,参数通过?占位符占位,然后顺序传递。

Stringsql="SELECT * FROM user_info WHERE id = ?";UserInfouserInfo=jdbcTemplate.queryForObject(sql,newBeanPropertyRowMapper<>(UserInfo.class),10002);System.out.println("jdbcTemplate:"+userInfo);// jdbcTemplate:UserInfo(id=10002, name=王二狗, age=54, sex=null, job=null, birthday=null, createdTime=2025-08-15 15:39:28.0, updateTime=null)

NamedParameterJdbcTemplateSpring 2.0引入的,通过:name占位符,然后通过占位符的名称传递参数,不受顺序的限制。

Stringsql="SELECT * FROM user_info WHERE id = :id";MapSqlParameterSourceparams=newMapSqlParameterSource().addValue("id",10002);UserInfouserInfo=namedParameterJdbcTemplate.queryForObject(sql,params,newBeanPropertyRowMapper<>(UserInfo.class));System.out.println("MapSqlParameterSource:"+userInfo);// MapSqlParameterSource:UserInfo(id=10002, name=王二狗, age=54, sex=null, job=null, birthday=null, createdTime=2025-08-15 15:39:28.0, updateTime=null)

这两种客户端虽然可以满足基本的操作,但是不够流畅。随着函数式编程、Lamada表达式被广大开发者接受,这两种客户端的操作方式,可能会被大家一直嫌弃。

03 JdbcClient

JdbcClient是在Spring 6.1引入的,结合两款老牌的端的参数传递的形式,又加入链式编程,以方面开发者的使用。JdbcClient可以完全取代老牌的客户端。

JdbcClient是 Spring 对 JDBC 访问的现代化改进,提供了更简洁、流畅的 API,统一了位置参数和命名参数的使用方式,减少了样板代码,更好地支持现代 Java 特性(Record、Optional等)。

官方地址:https://docs.spring.io/spring-framework/reference/data-access/jdbc/core.html#jdbc-JdbcClient

3.1 查询

Stringsql="SELECT * FROM user_info WHERE id = :id";Stringsql2="SELECT * FROM user_info WHERE id = ?";@Testvoidtest01(){UserInfouserInfo=jdbcClient.sql(sql).param("id",10002).query(UserInfo.class).single();System.out.println("sql:"+userInfo);System.out.println("--------------------");UserInfouserInfo2=jdbcClient.sql(sql2).param(10002).query(UserInfo.class).single();System.out.println("sql2:"+userInfo2);}

执行结果

3.2 更新

Stringsql="SELECT * FROM user_info WHERE id = :id";StringupdateSql="update user_info set name = :name where id = :id";@Testvoidtest02(){jdbcClient.sql(updateSql).param("name","刘十三").param("id",10002).update();UserInfouserInfo=jdbcClient.sql(sql).param("id",10002).query(UserInfo.class).single();System.out.println("sql:"+userInfo);}

执行结果

3.3 新增

@Testvoidtest03(){jdbcClient.sql("INSERT INTO user_info(name, age) VALUES(:name, :age)").param("name","归海一刀").param("age","200").update();UserInfouserInfo=jdbcClient.sql("SELECT * FROM user_info WHERE name = ?").param("归海一刀").query(UserInfo.class).single();System.out.println("sql:"+userInfo);}

执行结果

04 小结

JdbcClient相比之前的客户端确实简洁了不少,如果项目中需要使用jdbc客户端,JdbcClient将是你的不二选择。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 13:44:01

Electron 快速入门教程

Electron 是一个基于 Node.js 和 Chromium 的跨平台桌面应用开发框架&#xff0c;你可以用 HTML、CSS、JavaScript 构建 Windows、macOS、Linux 三端一致的桌面应用&#xff0c;比如 VS Code、Figma 都是基于 Electron 开发的。 本教程会带你从 环境搭建 到 打包第一个应用&am…

作者头像 李华
网站建设 2026/5/1 8:02:45

Python 金融初级学习计划(金融专业学生版)

目录 核心设计原则&#xff08;兴趣提升关键&#xff09; 前置准备&#xff08;1 天搞定&#xff0c;零门槛&#xff09; 1. 工具安装&#xff08;一键完成&#xff0c;不用配环境&#xff09; 2. 数据来源&#xff08;免费无门槛&#xff09; 第一阶段&#xff1a;入门准…

作者头像 李华
网站建设 2026/5/1 0:11:27

CAPTCHA 验证码自动化处理方案

一、验证码在测试中的挑战与自动化必要性 CAPTCHA&#xff08;全自动公共图灵测试&#xff09;是网站防止机器人滥用的核心防护机制&#xff0c;但在软件测试中常成为自动化流程的“绊脚石”。例如&#xff0c;UI自动化测试或持续集成&#xff08;CI&#xff09;流程中&#x…

作者头像 李华
网站建设 2026/5/1 3:32:02

一周之内,32G DDR3由200涨到350

上周电脑升级&#xff0c;32G DDR3 200&#xff0c;觉得贵。 这几天研究了一下存储形式&#xff0c;判断还要大涨&#xff0c;于是就想多买几条。结果已经要350了。

作者头像 李华
网站建设 2026/5/6 23:11:46

硬件架构的艺术:工程师视角下的数字电路设计方法与技术

在数字电路工程里&#xff0c;“功能能跑”只是及格线。真正拉开差距的&#xff0c;是架构是否稳健、时钟是否干净、跨时钟是否可靠、功耗是否可控、系统是否可长期维护。《硬件架构的艺术&#xff1a;数字电路的设计方法与技术》这本书&#xff0c;正是站在工程实践而非纯理论…

作者头像 李华