千家信息网

SpringBoot中怎么利用JDBC对数据库进行操作

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章将为大家详细讲解有关SpringBoot中怎么利用JDBC对数据库进行操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、JDBC简介JDB
千家信息网最后更新 2026年11月04日SpringBoot中怎么利用JDBC对数据库进行操作

这篇文章将为大家详细讲解有关SpringBoot中怎么利用JDBC对数据库进行操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

一、JDBC简介

JDBC(Java Data Base Connectivity,Java 数据库连接),说白了 JDBC 就是一套 Java 访问数据库的 API 规范;Spring Boot 支持了主流的 ORM 框架:MyBatis、Hibernate 和 Spring JDBC,几种 ORM 在不同的场景下各有优势,在 Spring Boot 体系内都有对应的 Starter 包以方便集成

  • 直接在Java中使用JDBC的步骤,比价复杂,需要7步完成:

try {    // 1、加载数据库驱动    Class.forName(driver);    // 2、获取数据库连接    conn = DriverManager.getConnection(url, username, password);    // 3、获取数据库操作对象    stmt = conn.createStatement();    // 4、定义操作的 SQL 语句    String sql = "select * from user where id = 6";    // 5、执行数据库操作    rs = stmt.executeQuery(sql);    // 6、获取并操作结果集    while (rs.next()) {    // 解析结果集    }} catch (Exception e) {    // 日志信息} finally {    // 7、关闭资源}

通过上面的示例可以看出直接使用 JDBC 来操作数据库比较复杂,因此后期在 JDBC 的基础上又发展出了很多著名的 ORM 框架,其中最为流行的是 Hibernate、MyBatis 和 Spring JDBC,这里主要了解一下 Spring JDBC 在 Spring Boot 中的使用

二、单数据源操作示例

Spring Boot 集成 JDBC 很简单,需要引入依赖并做基础配置即可,在开发项目之前需要先创建表,作为项目演示使用。设计一个 User 用户表,有 id、name、password、age 等字段,对应的 SQL 脚本如下:

DROP TABLE IF EXISTS `users`;CREATE TABLE `users` (  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',  `name` varchar(32) DEFAULT NULL COMMENT '用户名',  `password` varchar(32) DEFAULT NULL COMMENT '密码',  `age`  int DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
  1. 添加配置

  • 添加依赖包:

    org.springframework.boot    spring-boot-starter-jdbc    mysql    mysql-connector-java
  • 演示项目中使用 MySQL 作为数据库,因此项目中需要引入 MySQL 驱动包,同时引入 spring-boot-starter-jdbc。打开 pom.xml 文件,按下快捷键:Ctrl + Alt + SHIFT + U,或者单击右键,选择 Diagrams | Show Dependencies 选项,查看项目依赖类图。

  • 弹出"类图"对话框后,滚动鼠标放大查看,发现 spring-boot-starter-jdbc 直接依赖于 HikariCP 和 spring-jdbc。

  • HikariCP 是 Spring Boot 2.0 默认使用的数据库连接池,也是传说中最快的数据库连接池。

  • spring-jdbc 是 Spring 封装对 JDBC 操作的工具包。

  • 数据源的配置

spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=truespring.datasource.username=rootspring.datasource.password=rootspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

值得注意的是,在 Spring Boot 2.1.0 中,com.mysql.jdbc.Driver 已经过期,推荐使用 com.mysql.cj.jdbc.Driver。

  1. 实体类

  • 创建表对应的实体类:

public class User  {    private Long id;    private String name;    private String password;    private int age;    public User(String name, String password, int age) {        this.name = name;        this.password = password;        this.age = age;    }    // 省略 getter setter}
  1. 封装 Repository

  • 创建 UserRepository 定义我们常用的增删改查接口;

public interface UserRepository  {    int save(User user);    int update(User user);    int delete(long id);    List findALL();    User findById(long id);}
  • 创建 UserRepositoryImpl 类实现 UserRepository 类接口;类上使用 @Repository 注解用于标注数据访问组件,同时在类中注入 JdbcTemplate,其是 Spring 操作 JDBC 提供的工具类。

@Repositorypublic class UserRepositoryImpl implements UserRepository {    @Autowired    private JdbcTemplate jdbcTemplate;}
  • 接下来封装保存用户/更新用户信息/删除用户信息/用户id查询/获取用户列表的方法

@Overridepublic int save(User user) {    return jdbcTemplate.update("INSERT INTO users(name, password, age) values(?, ?, ?)",          user.getName(), user.getPassword(), user.getAge());}@Overridepublic int update(User user) {    return jdbcTemplate.update("UPDATE users SET name = ? , password = ? , age = ? WHERE id=?",           user.getName(), user.getPassword(), user.getAge(), user.getId());}@Overridepublic int delete(long id) {    return jdbcTemplate.update("DELETE FROM users where id = ? ",id);}@Overridepublic User findById(long id) {    return jdbcTemplate.queryForObject("SELECT * FROM users WHERE id=?", new Object[] { id }, new BeanPropertyRowMapper(User.class));}@Overridepublic List findALL() {    return jdbcTemplate.query("SELECT * FROM users", new UserRowMapper());    // return jdbcTemplate.query("SELECT * FROM users", new BeanPropertyRowMapper(User.class));}

这里使用了 new BeanPropertyRowMapper(User.class) 对返回的数据进行封装,它可自动将一行数据映射到指定类的实例中,首先将这个类实例化,然后通过名称匹配的方式,映射到属性中去。

findALL() 使用了一个新的方式来封装结果集的返回,创建一个内部类 UserRowMapper。 UserRowMapper 继承了 RowMapper,RowMapper 可以将数据中的每一行数据封装成用户定义的类,实现 RowMapper 接口覆盖 mapRow 方法,在 mapRow 方法封装对数据的返回处理。通过上面代码可以看出 UserRowMapper 循环遍历了查询返回的结果集,遍历的同时按照属性进行赋值。这样在查询使用时只需要传入 new UserRowMapper() 即可自动解析返回数据。

class UserRowMapper implements RowMapper {    @Override    public User mapRow(ResultSet rs, int rowNum) throws SQLException {        User user = new User();        user.setId(rs.getLong("id"));        user.setName(rs.getString("name"));        user.setPassword(rs.getString("password"));        user.setAge(rs.getInt("age"));    }}
  1. 测试

  • 接下里我们对封装好的 UserRepository 进行测试,测试 UserRepository 中的各个方法是否正确。创建 UserRepositoryTests 类,将 userRepository 注入到类中。

@RunWith(SpringRunner.class)@SpringBootTestpublic class UserRepositoryTests {    @Autowired    private UserRepository userRepository;}//测试插入数据,直接调用 userRepository 对应的 save 方法@Testpublic void testSave() {    User user =new User("neo","123456",30);    userRepository.save(user);}//按照上面方式分别测试其他方法...

三、多数据源的使用

在项目中使用多个数据源是很常见的情况,Spring Boot 中多数据源的使用需要自行封装。我们在上面示例项目的基础上进行改造。

  1. 配置文件

  • 添加了两个数据源,一个是 test1 库,一个是 test2 库。

spring.datasource.primary.jdbc-url=jdbc:mysql://localhost:3306/test1?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=truespring.datasource.primary.username=rootspring.datasource.primary.password=rootspring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.secondary.jdbc-url=jdbc:mysql://localhost:3306/test2?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=truespring.datasource.secondary.username=rootspring.datasource.secondary.password=rootspring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
  1. 初始化 JDBC

  • 在项目启动的时候读取配置文件中的信息,并对 JDBC 初始化。

@Configurationpublic class DataSourceConfig {    @Primary    @Bean(name = "primaryDataSource")    @Qualifier("primaryDataSource")    @ConfigurationProperties(prefix="spring.datasource.primary")    public DataSource primaryDataSource() {            return DataSourceBuilder.create().build();    }    @Bean(name = "secondaryDataSource")    @Qualifier("secondaryDataSource")    @ConfigurationProperties(prefix="spring.datasource.secondary")    public DataSource secondaryDataSource() {        return DataSourceBuilder.create().build();    }    @Bean(name="primaryJdbcTemplate")    public JdbcTemplate primaryJdbcTemplate (        @Qualifier("primaryDataSource")  DataSource dataSource ) {        return new JdbcTemplate(dataSource);    }    @Bean(name="secondaryJdbcTemplate")    public JdbcTemplate  secondaryJdbcTemplate(            @Qualifier("secondaryDataSource") DataSource dataSource) {        return new JdbcTemplate(dataSource);    }}

这段代码表示在启动的时候根据特定的前缀加载不同的数据源,根据构建好的数据源再创建不同的 JDBC。

  1. UserRepository 改造

  • 我们对 UserRepository 中的所有方法进行改造,增加一个参数为 JdbcTemplate,如果方法中传输了 JdbcTemplate,方法内就会使用传递的 JdbcTemplate 进行操作,如果传递的 JdbcTemplate 为空,使用默认的 JdbcTemplate 连接操作。

@Repositorypublic class UserRepositoryImpl implements UserRepository {    @Autowired    private JdbcTemplate primaryJdbcTemplate;    @Override    public int save(User user,JdbcTemplate jdbcTemplate) {        if(jdbcTemplate == null){            jdbcTemplate= primaryJdbcTemplate;        }        return jdbcTemplate.update("INSERT INTO users(name, password, age) values(?, ?, ?)",              user.getName(), user.getPassword(), user.getAge());    }  //其他方法省略,详细内容可以查看源码}
  1. 多数据源测试

  • 测试类中注入了两个不同数据源的 JdbcTemplate,同时注入 UserRepository。测试使用不同的 JdbcTemplate 插入两条数据,查看两个数据库中是否都保存成功。测试前请先创建 test1 和 test2 数据库,以及两个数据库中的用户表。

@RunWith(SpringRunner.class)@SpringBootTestpublic class UserRepositoryTests {    @Autowired    private UserRepository userRepository;    @Autowired    private JdbcTemplate primaryJdbcTemplate;    @Autowired    private JdbcTemplate secondaryJdbcTemplate;    @Test    public void testSave() {        User user =new User("smile","123456",30);        userRepository.save(user,primaryJdbcTemplate);        userRepository.save(user,secondaryJdbcTemplate);    }}

执行 testSave() 成功后,登录 test1 和 test 2 数据库查看 user 表,都存在一条 name 为 smile 的用户信息,说明多数据源插入数据成功,其他方法的测试大体相同。这样在项目中,我们想使用哪个数据源操作数据库时,只需要传入数据源对应的 JdbcTemplate 实例即可。

关于SpringBoot中怎么利用JDBC对数据库进行操作就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

数据 数据库 数据源 方法 用户 测试 项目 封装 不同 信息 配置 两个 同时 结果 成功 内容 基础 实例 接口 文件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 花魁咖啡 深圳恒合互联网络科技有限公司 互联网与新科技 米客互联网科技 互联网科技网站 长亮科技互联网金融 互联网科技公司介绍 深圳卡尔迅互联网科技有限公司怎么样 上海宁丞科技互联网 语蝶互联网科技有限公司 米聚互联网科技南京有限公司排面 青海科技产业互联网发展 朱啸虎曾投资哪些互联网科技企业 明优互联网科技有限公司 广州有谷有贝互联网科技有限公司 山东大美朱楼互联网科技有限公司 萌小萌互联网科技河南有限公司 同城互联网络科技 亚光科技低轨卫星互联网 长沙易易互联网科技有限公司 手磨咖啡 南京欣网互联网络科技 互联网巨头反垄断金融科技 互联网金融 科技金融 互联网科技公司有哪些 盛创互联网科技有限公司 新华互联网科技2019 佳云科技和互联网广告 内蒙古九一互联网科技 广州新华互联网科技学校电竞方面
0