news 2026/7/14 12:06:36

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/7/11 8:19:38

二三维一体化方案终极对决:谁才是你的最佳选择

全球级项目选Cesium,城市级应用挑Mapbox,国内政企找超图……但真相真的如此简单吗?🤔🔍💥 在数字孪生、智慧城市大行其道的今天,二三维一体化已成为地理信息应用的标配需求。但面对市场上琳琅满目的技术方案,开发团队往往陷入选择困境: 到底该用哪个?哪个方案既强…

作者头像 李华
网站建设 2026/7/2 1:19:06

触觉传感器如何布局最有效?一项关于抓取学习效率的仿真对比研究

在机器人领域&#xff0c;尤其是灵巧手和假肢设计中&#xff0c;触觉传感正变得越来越重要。它能提供直接的接触信息&#xff0c;如接触事件、滑移检测甚至纹理识别&#xff0c;从而显著提升抓取的稳定性。然而&#xff0c;目前的研究在触觉传感器的布局上可谓“百花齐放”&…

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

强烈安利2026 TOP10 AI论文写作软件:本科生毕业论文必备神器

强烈安利2026 TOP10 AI论文写作软件&#xff1a;本科生毕业论文必备神器 2026年AI论文写作工具测评&#xff1a;为何值得一看&#xff1f; 随着人工智能技术的不断进步&#xff0c;AI写作工具在学术领域的应用越来越广泛。对于本科生而言&#xff0c;撰写毕业论文不仅是一项繁重…

作者头像 李华
网站建设 2026/7/6 17:04:41

基于机器学习的商品推荐系统[python]-计算机毕业设计源码+LW文档

摘要&#xff1a;随着电子商务的迅猛发展&#xff0c;商品数量和种类急剧增加&#xff0c;用户在海量商品中快速找到符合自身需求的商品变得愈发困难。基于机器学习的商品推荐系统能够有效解决这一问题&#xff0c;通过分析用户的历史行为数据、个人偏好等信息&#xff0c;为用…

作者头像 李华