对比Spring Boot中的JdbcClient与JdbcTemplate

这篇具有很好参考价值的文章主要介绍了对比Spring Boot中的JdbcClient与JdbcTemplate。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文我们一起看看Spring Boot中 JdbcClientJdbcTemplate 之间的差异。

以下内容使用的Java和Spring Boot版本为:

  • Java 21
  • Spring Boot 3.2.1

假设我们有一个ICustomerService接口:

public interface ICustomerService {
    
    List<Customer> getAllCustomer();

    Optional<Customer> getCustomerById(int id);

    void insert(Customer customer);

    void update(int id, Customer customer);
    
    void delete(int id);
}

其中,涵盖了我们常见的数据CRUD操作。

下面就来一起看看,分别使用 JDBC ClientJDBC Template 的实现。

初始化对比

JdbcTemplate的初始化:

private final JdbcTemplate jdbcTemplate;

public CustomerJdbcTemplateService(JdbcTemplate jdbcTemplate){
  this.jdbcTemplate = jdbcTemplate;
}

JdbcClient的初始化;

private final JdbcClient jdbcClient;

public CustomerJdbcClientService(JdbcClient jdbcClient){
  this.jdbcClient = jdbcClient;
}

增删改查的实现对比

如果您学习过程中如遇困难?可以加入我们超高质量的Spring技术交流群,参与交流与讨论,更好的学习与进步!更多Spring Boot教程可以点击直达!,欢迎收藏与转发支持!

查询的实现对比

getAllCustomer查询返回集合数据的实现对比:

// jdbcTemplate实现
private final RowMapper<Customer> rowMapper = (rs, row)
     -> new Customer(rs.getInt("id"), rs.getString("name"), rs.getString("lastname"), rs.getDate("birthday"));

public List<Customer> getAllCustomer() {
  return jdbcTemplate.query("select id, name, lastname, birthday from customer", rowMapper);
}

// jdbcClient实现
public List<Customer> getAllCustomer(){
  return jdbcClient.sql("select id, name, lastname, birthday from customer").query(Customer.class).list();
}

getCustomerById查询返回单条数据的实现对比:

// jdbcTemplate实现
public Optional<Customer> getCustomerById(int id) {
  Customer customer = null;
  try {
    customer = jdbcTemplate.queryForObject("select id, name, lastname, birthday from customer where id = ?", rowMapper,  id );
  } catch (DataAccessException ex){
    LOG.error("Data not found. Id parameter: " + id, ex);
  }
  return Optional.ofNullable(customer);
}

// jdbcClient实现
public Optional<Customer> getCustomerById(int id){
  return jdbcClient.sql("select id, name, lastname, birthday from customer where id= :id")
                   .param("id", id)
                   .query(Customer.class)
                   .optional();
}

insert插入数据的实现对比

// jdbcTemplate实现
public void insert(Customer customer) {
  int inserted = jdbcTemplate.update("insert into customer (id, name, lastname, birthday) values (?,?,?,?)",
                 customer.id(), customer.name(), customer.lastname(),customer.birthday());
  Assert.state(inserted == 1 , "An exception error occurred while inserting customer");
}

// jdbcClient实现
public void insert(Customer customer){
  int inserted = jdbcClient.sql("insert into customer (id, name, lastname, birthday) values (?,?,?,?)")
                .params(List.of(customer.id(), customer.name(), customer.lastname(), customer.birthday()))
                .update();
  Assert.state(inserted == 1 , "An exception error occurred while inserting customer");
}

update更新数据的实现对比

// jdbcTemplate实现
public void update(int id, Customer customer) {
  int updated = jdbcTemplate.update("update customer set name = ?, lastname = ?, birthday = ? where id = ? ",
                customer.name(), customer.lastname(),customer.birthday(), id);
  Assert.state(updated == 1 , "An exception error occurred while updating customer");
}

// jdbcClient实现
public void update(int id, Customer customer){
  int updated = jdbcClient.sql("update customer set name = ?, lastname = ?, birthday = ? where id = ?")
                .params(List.of(customer.name(), customer.lastname(), customer.birthday(), id))
                .update();
  Assert.state(updated == 1, "An exception error occurred while updating customer");
}

delete删除数据的实现对比

// jdbcTemplate实现
public void delete(int id) {
  int deleted = jdbcTemplate.update("delete from customer where id = ?", id);
  Assert.state(deleted == 1 , "An exception error occurred while deleting customer");
}

// jdbcClient实现
public void delete(int id) {
  int deleted = jdbcClient.sql("delete from customer where id = :id").param("id",id).update();
  Assert.state(deleted == 1, "An exception error occurred while updating customer");
}

总结

上面我们分别演示了JdbcClientJdbcTemplate从初始化到真正执行增删改查操作的代码样例。总体上来说,JdbcClient的实现更为简洁方便。如果不考虑其他ORM框架的情况下,在未来的Spring Boot版本中,我会更偏向于选择JdbcClient来操作数据库。那么您觉得怎么样呢?留言区一起聊聊~

欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源文章来源地址https://www.toymoban.com/news/detail-778077.html

到了这里,关于对比Spring Boot中的JdbcClient与JdbcTemplate的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring-JDBCTemplate

    一、引子 我们在JavaWeb阶段向读者介绍过JDBC(请回顾JDBC基本概念),由于JDBC使用上的繁琐,又介绍了MyBatis的使用(请回顾MyBatis基本概念)。现在又写一篇文章用来介绍JDBCTemplate,似乎是翻来覆去讲一些重复的东西。实则不然,虽然只了解一门技术便可完成需求的实现,但是

    2024年02月22日
    浏览(24)
  • Spring JdbcTemplate

    三联支持 一起鼓励 一起进步 JdbcTemplate 用于和数据库交互的,实现对表的CRUD操作。 它是Spring框架提供的一个对象,是对原始Jdbc API对象的简单封装。Spring框架为我们提供了很多的操作模板类。 JdbcTemplate在spring-jdbc-5.0.2.RELEASE.jar中,我们在导包的时候,除了要导入这个jar包,

    2024年02月08日
    浏览(24)
  • Spring JdbcTemplate(使用详解)

    企业级应用开发中,很少有人直接使用原生的 JDBC API 进行开发,因为使用 JDBC API 对数据库进行操作十分繁琐,例如我们需要手动控制数据库连接的开启,异常处理、事务处理、最后还要手动关闭连接释放资源等等。 Spring 提供了一个 Spring JDBC 模块,它对 JDBC API 进行了封装,

    2024年02月12日
    浏览(23)
  • Spring:JDBCTemplate

    JDBC(Java DataBase Connectivity,Java 数据库连接) , 一 种用于执行 SQL 语句的 Java API(Application Programming Interface , 应用程序设计接口 ),可以为多种关系数据库提供统一访问,由一组用 Java 语言编写的类和接口组成。 JDBCTemplate ,是一个 JDBC 的模板,Spring 封装了 JDBC 常用的操作

    2024年02月14日
    浏览(24)
  • Spring JdbcTemplate.queryForList()

    在本文中,我们将学习使用 JdbcTemplate.queryForList()  方法。queryForList()方法执行给定的 SQL 并返回结果 List  对象。 queryForList()方法通过以下方式接受参数。 1.   执行给定的静态查询并返回一个列表。它使用 JDBC Statement语句,而不是 PreparedStatement。结果列表包含映射。一个映射

    2024年02月02日
    浏览(23)
  • 13、Spring之JdbcTemplate

    ++++++++++++++++++++++++++++++分割线++++++++++++++++++++++++++++++ JdbcTemplate的增删改都是用update这个方法 ++++++++++++++++++++++++++++++分割线++++++++++++++++++++++++++++++

    2024年02月11日
    浏览(23)
  • Spring JdbcTemplate.queryForObject()

    Spring  JdbcTemplate  是JDBC核心包中的中心类。它简化了 JDBC 与 Spring 的使用,并有助于避免常见错误。在此页面上,我们将学习使用 它 的 queryForObject  方法。 JdbcTemplate.queryForObject不同参数的方法。 1.   执行给定的 SQL 并返回所需类型的对象。 2. 查询给定的 SQL 以从 SQL 创建预

    2024年02月12日
    浏览(25)
  • javaee spring jdbcTemplate的使用

    spring配置文件 测试类

    2024年02月11日
    浏览(24)
  • Spring6 JdbcTemplate和事务

    1.1、简介 Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作 1.2、准备工作 ①搭建子模块 搭建子模块:spring-jdbc-tx ②加入依赖 ③创建jdbc.properties ④配置Spring的配置文件 beans.xml ⑤准备数据库与测试表 1.3、实现CURD ①装配 JdbcTemplate 创建测试类,整合JUnit,注入

    2024年02月09日
    浏览(29)
  • Spring Boot中的Actuator是什么?Spring Boot中的Starter依赖是什么?

    在Spring Boot中,Actuator是一种用于监控和管理应用程序的工具。它提供了一些额外的端点和功能,使开发人员能够更好地了解和控制他们的应用程序。 Actuator提供了以下功能: 指标收集:Actuator可以收集并显示有关应用程序的指标,例如内存使用情况、线程数、请求处理时间等

    2024年02月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包