SpringBoot 中使用 JdbcTemplate 访问关系型数据库

本文详细介绍了如何在SpringBoot应用中使用JdbcTemplate进行数据库操作,包括数据模型和Repository层设计,以及使用JdbcTemplate进行查询和插入操作。通过示例代码展示了JdbcTemplate如何简化SQL查询和数据插入,包括使用SimpleJdbcInsert进一步简化插入过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


JDBC 规范是 Java 领域中使用最广泛的数据访问标准,目前市面上主流的数据访问框架都是构建在 JDBC 规范之上。因为 JDBC 是偏底层的操作规范,所以关于如何使用 JDBC 规范进行关系型数据访问的实现方式有很多(区别在于对 JDBC 规范的封装程度不同),而在 Spring 中,同样提供了 JdbcTemplate 模板工具类实现数据访问,它简化了 JDBC 规范的使用方法,本文将围绕这个模板类展开讨论。

1)数据模型和 Repository 层设计

之前文章《剖析 Spring Web 应用程序》中的SpringCSS 案例,先给出 order-service 中的数据模型。

一个订单中往往涉及一个或多个商品,所以在SpringCSS案例中,主要通过一对多的关系来展示数据库设计和实现方面的技巧。为了使描述更简单把具体的业务字段做了简化。Order 类的定义如下代码所示:

public class Order{
   
   
    private Long id; //订单Id
    private String orderNumber; //订单编号
    private String deliveryAddress; //物流地址
    private List<Goods> goodsList;  //商品列表
    //省略了 getter/setter
}

其中代表商品的 Goods 类定义如下:

public class Goods {
   
   
    private Long id; //商品Id
    private String goodsCode; //商品编号
    private String goodsName; //商品名称
    private Double price; //商品价格
    //省略了 getter/setter
}

从以上代码可以看出一个订单可以包含多个商品,因此设计关系型数据库表时,首先会构建一个中间表来保存 Order 和 Goods 这层一对多关系。在本用 MySQL 作为关系型数据库,对应的数据库 Schema 定义如下代码所示:

DROP TABLE IF EXISTS `order`;
DROP TABLE IF EXISTS `goods`;
DROP TABLE IF EXISTS `order_goods`;
 
create table `order` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT,
    `order_number` varchar(50) not null,
    `delivery_address` varchar(100) not null,
  `create_time` timestamp not null DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
);
 
create table `goods` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `goods_code` varchar(50) not null,
  `goods_name` varchar(50) not null,
  `goods_price` double not null,
  `create_time` timestamp not null DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
);
 
create table `order_goods` (
    `order_id` bigint(20) not null,
    `goods_id` bigint(20) not null,
    foreign key(`order_id`) references `order`(`id`),
    foreign key(`goods_id`) references `goods`(`id`)
);

基于以上数据模型,要完成 order-server 中的 Repository 层组件的设计和实现。首先需要设计一个 OrderRepository 接口,用来抽象数据库访问的入口,如下代码所示:

public interface OrderRepository {
   
   
    Order addOrder(Order order);
    Order getOrderById(Long orderId);
    Order getOrderDetailByOrderNumber(String orderNumber);
}

这个接口非常简单,方法都是自解释的。不过这里的 OrderRepository 并没有继承任何父接口,完全是一个自定义的、独立的 Repository。针对上述 OrderRepository 中的接口定义,将构建一系列的实现类:

  • OrderRawJdbcRepository:使用原生 JDBC 进行数据库访问
  • OrderJdbcRepository:使用 JdbcTemplate 进行数据库访问
  • OrderJpaRepository:使用 Spring Data JPA 进行数据库访问

OrderRawJdbcRepository 类中实现方法如下代码所示:

@Repository(
Spring Boot和Elasticsearch(简称ES)是两种不同的技术,分别用于处理关系型数据库和文档式数据库Spring Boot用于开发关系型数据库应用程序,例如MySQL,PostgreSQL和Oracle等。而ES是一个基于Lucene的文档式数据库,用于存储和检索大量文档形式的数据。 对于关系型数据库数据的操作,Spring Boot提供了多种方法和工具来简化开发过程。首先,Spring Boot提供了JPA(Java Persistence API)通过Hibernate来进行数据库操作,提供了一组标准化的接口来实现数据库访问。通过使用JPA,开发者可以轻松地进行增删改查等操作。另外,Spring Boot还支持使用JdbcTemplate来处理更底层的数据库操作。 另一方面,对于使用ES进行数据操作,Spring Boot提供了一系列的集成模块,例如spring-data-elasticsearch和elasticsearch-rest-high-level-client等。通过这些模块,开发者可以方便地与ES进行交互。开发者可以使用注解和查询构建器来定义索引、映射和查询等操作。此外,Spring Boot还提供了自动化配置和优化的功能,以简化ES集成的过程。 总而言之,Spring Boot可以很好地支持关系型数据库和ES的数据操作。对于关系型数据库,可以使用JPA或JdbcTemplate进行增删改查等操作。对于ES,可以使用spring-data-elasticsearch和elasticsearch-rest-high-level-client等模块进行索引、映射和查询等操作。通过Spring Boot的集成和自动化配置,开发者可以更加轻松地处理这些不同类型数据库的数据操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值