news 2026/6/10 16:42:14

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/6/10 7:59:59

多维度测试覆盖率评估模型:提升软件质量的核心引擎

在软件测试领域&#xff0c;覆盖率评估是衡量测试充分性的关键指标&#xff0c;而多维度模型通过整合代码、需求和风险视角&#xff0c;解决了单一指标的局限性。本文将深入探讨其理论框架、核心维度、实践应用及未来趋势&#xff0c;为测试团队提供可落地的优化路径。 一、多…

作者头像 李华
网站建设 2026/6/10 7:52:14

用户体验指标(LCP/FID/CLS)自动化采集实战指南

在当今数字化时代&#xff0c;用户体验&#xff08;UX&#xff09;已成为软件质量的核心评估维度。LCP&#xff08;最大内容绘制&#xff09;、FID&#xff08;首次输入延迟&#xff09;和CLS&#xff08;累积布局偏移&#xff09;作为Google Core Web Vitals的核心指标&#x…

作者头像 李华
网站建设 2026/6/10 8:00:04

用 Obsidian 打造AI笔记

介绍我在日常工作中发现&#xff0c;在大模型时代&#xff0c;Obsidian 是本地笔记的不二之选。特别是搭配大模型使用时&#xff0c;你可以随时调取本地笔记&#xff0c;就像随身携带了一套专属的知识库。这套体系一旦建立好&#xff0c;能极大地提升你的知识复用效率。安装访问…

作者头像 李华
网站建设 2026/6/10 8:00:13

openssh升级

一、安装telnet二、升级ssh三、回滚

作者头像 李华