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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值