一文带你学会Spring JDBC的使用

一文带你学会Spring JDBC的使用

简介

Spring JDBC是基于JDBC的框架,它提供了许多方便的功能去简化JDBC编码的繁琐。它可以自动管理连接、传播事务,同时提供了一种直观且简洁的方式去执行SQL语句,Spring JDBC已成为了Java应用程序中访问数据库的首选。本文将介绍如何使用Spring JDBC去连接数据库、执行SQL查询与更新,并演示一些常见的用例。

步骤

1. 添加依赖

首先,需要添加Spring JDBC的依赖到你的项目中。如果你正在使用Maven,那么可以在pom.xml文件中添加如下依赖:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.3.5</version>
</dependency>

如果你使用Gradle,可以在build.gradle文件中添加如下依赖:

implementation 'org.springframework:spring-jdbc:5.3.5'

2. 配置数据源

在使用Spring JDBC之前,需要先配置数据源。如果你使用的是关系型数据库,可以使用Spring提供的DataSource接口去配置数据源。Spring可以配置各种各样的数据源(例如Druid、HikariCP等),这里我们以连接MySQL为例,配置一个基本的DataSource

@Bean
public DataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/test_db");
    dataSource.setUsername("root");
    dataSource.setPassword("password");

    return dataSource;
}

在这个例子中,我们使用了DriverManagerDataSource,这是一种简单的数据源实现。你也可以使用其他更高级的数据源实现(例如HikariCP),它们可以提供更好的性能和稳定性。

3. 执行查询

完成数据源的配置之后,可以使用Spring JDBC去执行SQL查询。以下是一个简单的例子,展示如何使用Spring JDBC查询数据库中的数据:

@Autowired
private JdbcTemplate jdbcTemplate;

public List<Customer> findAll() {
    String sql = "SELECT * FROM customers";
    RowMapper<Customer> rowMapper = new CustomerRowMapper();

    return jdbcTemplate.query(sql, rowMapper);
}

在这个例子中,我们使用了JdbcTemplate类去执行SQL查询。JdbcTemplate是Spring JDBC中提供的一个核心类,它封装了大量常用的JDBC操作和异常处理,让我们可以更轻松地执行常见的任务。例如,我们可以使用query方法执行SELECT查询,它需要提供一个SQL语句和结果集的映射器(RowMapper),并返回查询结果。

4. 执行更新

除了查询数据之外,Spring JDBC也可以执行SQL更新(INSERT、UPDATE、DELETE等)。以下是一个简单的例子,演示如何通过JdbcTemplate去更新数据库:

@Autowired
private JdbcTemplate jdbcTemplate;

public void update(Customer customer) {
    String sql = "UPDATE customers SET name = ?, email = ? WHERE id = ?";
    jdbcTemplate.update(sql, customer.getName(), customer.getEmail(), customer.getId());
}

在这个例子中,我们使用了update方法去执行SQL更新。update方法需要提供一个SQL语句和SQL语句中占位符的值,并返回更新的记录数。

示例

接下来,演示一下如何通过Spring JDBC去操作MySQL数据库。在这个例子中,我们将展示如何查询、插入、更新和删除数据。

1. 配置数据源

在这个例子中,我们将使用HikariCP作为数据源,我们需要修改之前的数据源配置:

@Bean
public DataSource dataSource() {
    HikariConfig config = new HikariConfig();
    config.setJdbcUrl("jdbc:mysql://localhost:3306/test_db");
    config.setUsername("root");
    config.setPassword("password");
    config.setDriverClassName("com.mysql.cj.jdbc.Driver");

    return new HikariDataSource(config);
}

2. 定义实体类

我们将创建一个实体类User来表示数据库中的一条记录:

public class User {
    private int id;
    private String name;
    private String email;

    // constructors, getters, and setters
}

3. 查询数据

下面是一个查询数据的例子:

@Autowired
private JdbcTemplate jdbcTemplate;

public List<User> findAll() {
    String sql = "SELECT * FROM users";
    RowMapper<User> rowMapper = new BeanPropertyRowMapper<>(User.class);

    return jdbcTemplate.query(sql, rowMapper);
}

在这个例子中,我们使用了BeanPropertyRowMapper,它是Spring提供的一个映射器,可以根据Java类的属性名自动映射查询结果。

4. 插入数据

以下是一个插入数据的例子:

@Autowired
private JdbcTemplate jdbcTemplate;

public void insert(User user) {
    String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
    jdbcTemplate.update(sql, user.getName(), user.getEmail());
}

在这个例子中,我们使用了update方法去执行INSERT查询。由于我们并不需要返回更新记录数,所以可以使用更简单的update方法。

5. 更新数据

以下是一个更新数据的例子:

@Autowired
private JdbcTemplate jdbcTemplate;

public void update(User user) {
    String sql = "UPDATE users SET name = ?, email = ? WHERE id = ?";
    jdbcTemplate.update(sql, user.getName(), user.getEmail(), user.getId());
}

6. 删除数据

以下是一个删除数据的例子:

@Autowired
private JdbcTemplate jdbcTemplate;

public void delete(int id) {
    String sql = "DELETE FROM users WHERE id = ?";
    jdbcTemplate.update(sql, id);
}

总结

Spring JDBC是一个非常强大的框架,它可以极大地简化JDBC编码的难度。在本文中,我们介绍了如何使用Spring JDBC去连接数据库、执行SQL查询和更新,并提供了一些示例。希望这篇文章对你有所帮助,谢谢!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文带你学会Spring JDBC的使用 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 线程局部变量的作用是什么?

    以下是关于线程局部变量的作用的完整使用攻略: 线程局部变量的作用 线程局部变量是指在多线程编程中,每个线程都拥有自己的变量本,互不干扰的一种变量。线程局部变量可以用来存储线程的状态信息,从而实现线程之间的数据隔离和共享。 线程局部变量的作用主要有以下几个方面: 1. 实现线程之间的数据隔离 在多线程编程中,线程之间的数据隔离是非常重要的。线程局部变量用来存储…

    Java 2023年5月12日
    00
  • 浅谈Java分布式架构下如何实现分布式锁

    浅谈Java分布式架构下如何实现分布式锁 分布式锁通常用于“共享资源”中,以保证资源的互斥访问。在分布式环境中,由于节点的分散性和网络等因素,保证资源互斥访问变得复杂。因此,需要使用分布式锁实现分布式环境下的资源互斥访问。本篇文章主要介绍Java中如何实现分布式锁。 实现思路 常见的分布式锁实现方式有:ZooKeeper、Redis等。接下来以Redis为例…

    Java 2023年5月27日
    00
  • Java的Hibernate框架中的组合映射学习教程

    我将为您详细讲解Java的Hibernate框架中的组合映射学习教程的完整攻略。步骤如下: 1. 了解组合映射的概念 组合映射就是将一个实体类中的组合类型的对象映射到数据库中的一张表的一行记录中,这张表中除了组合类型的对象所对应的列之外,还有其他的列。组合映射并不是将组合类型的对象映射成一个单独的表,而是将包含有组合类型对象的实体类映射成一张表,表中主要包含…

    Java 2023年5月31日
    00
  • springboot整合spring-data-redis遇到的坑

    下面是Spring Boot整合Spring Data Redis的详细攻略,包括常见的坑和解决方法。 准备工作 首先,确保电脑中安装有Redis服务,并启动了Redis服务。然后在Spring Boot项目中添加以下依赖: <dependencies> <dependency> <groupId>org.springfr…

    Java 2023年5月20日
    00
  • 解决Idea的tomcat启动报多个listener的错误问题

    下面是详细的攻略: 问题背景 在使用IntelliJ IDEA进行Web开发时,经常需要使用内置的Tomcat容器进行开发和测试,但是在启动Tomcat容器时,经常会出现多个监听器(listener)的错误问题,该错误提示可能如下所示: SEVERE: One or more listeners failed to start. Full details w…

    Java 2023年5月19日
    00
  • 解析:ClickOnce通过URL传递参数 XXX.application?a=1

    ClickOnce是一种基于浏览器和.NET Framework的技术,可以方便的分发和安装Windows应用程序。在ClickOnce应用程序中,我们可以通过URL传递参数,在打开程序时就自动加载所需要的数据或执行相应的操作。以下是解析ClickOnce通过URL传递参数的完整攻略。 1. 理解ClickOnce URL传递参数的格式 在ClickOnce…

    Java 2023年6月15日
    00
  • 三道java新手入门面试题,通往自由的道路–JVM

    三道Java新手入门面试题:通往自由的道路 — JVM 在Java面试中,常常会出现一些关于Java虚拟机(JVM)的问题,而这三道面试题可以帮助Java初学者掌握JVM的基础知识,进而为解决更复杂的问题打下基础。 面试题一:Java程序从编译到运行的过程是怎样的? Java程序的编译和运行大致可以分为以下几个步骤: 编译:将Java源代码编译成字节码文件…

    Java 2023年5月19日
    00
  • java 处理常量字符串过长 & springboot 项目读取 resouces 文件夹下的文件内容

    长字符串起因 项目里面有一长串的加密字符串(最长的万多个字符),需要拼接作为参数发送给第三方。 如果我们使用 枚举 定义的话,idea 编译的时候就会出现编译报错 Error: java:常量字符串过长 解决想法 网上还有一个说法,说是编译器问题,修改 idea 工具的编译为 eclipse 即可。 但是结果我仍然不满意,所以我决定把他放在文件中,然后需要的…

    Java 2023年4月18日
    00
合作推广
合作推广
分享本页
返回顶部