使用 Spring JDBC 进行数据库操作:深入解析 JdbcTemplate

devtools/2025/2/2 6:08:48/

目录

1. Spring JDBC 简介

2. JdbcTemplate 介绍

3. 创建数据库和表

4. 配置 Spring JDBC

5. 创建实体类

6. 使用 JdbcTemplate 实现增、删、改、查操作

7. Spring JDBC 优点

8. 小结


1. Spring JDBC 简介

        Spring JDBC 是 Spring 框架中的一个模块,旨在简化数据库访问操作。它通过封装底层的 JDBC API,减少了繁琐的代码,提高了开发效率。传统的 JDBC 编程要求开发人员手动处理数据库连接、SQL 执行、错误处理以及资源释放等。而 Spring JDBC 通过提供 JdbcTemplate 类以及其他辅助工具,屏蔽了这些底层细节,使得数据库操作更加简单、直观且易于维护。

2. JdbcTemplate 介绍

JdbcTemplate 是 Spring 框架中用于简化 JDBC 操作的核心类,它对传统的 JDBC API 做了封装,提供了丰富的方法,方便开发人员进行数据库操作。主要的操作包括执行增、删、改、查等操作。

常用的 JdbcTemplate 方法类型
  1. execute 方法execute 方法可以用于执行任何 SQL 语句,一般用于执行 DDL(Data Definition Language)语句,比如创建表、删除表等。

    jdbcTemplate.execute("CREATE TABLE user (...);");
    
  2. update 和 batchUpdate 方法

    • update 用于执行新增、修改、删除等语句。
    • batchUpdate 用于批量执行 SQL 操作,可以显著提高效率。
    jdbcTemplate.update("INSERT INTO user (username, address) VALUES (?, ?)", "李连杰", "上海");
    
  3. query 和 queryForXXX 方法

    • query 用于查询返回多个结果的 SQL 语句。
    • queryForObjectqueryForList 等方法用于查询单个对象或列表。
    List<User> users = jdbcTemplate.query("SELECT * FROM user", new BeanPropertyRowMapper<>(User.class));
    
  4. call 方法call 方法用于执行数据库的存储过程或函数。

    jdbcTemplate.call("{CALL some_procedure(?)}", params);
    

3. 创建数据库和表

首先,我们需要在 MySQL 数据库中创建一个示例数据库,并在其中创建一个简单的用户表 user

CREATE DATABASE mybatis_demo;USE mybatis_demo;CREATE TABLE `user` (`id` INT(11) NOT NULL AUTO_INCREMENT,`username` VARCHAR(32) NOT NULL COMMENT '用户名称',`birthday` DATETIME DEFAULT NULL COMMENT '生日',`sex` CHAR(1) DEFAULT NULL COMMENT '性别',`address` VARCHAR(256) DEFAULT NULL COMMENT '地址',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- 插入一些示例数据
INSERT INTO `user` (`id`, `username`, `birthday`, `sex`, `address`) VALUES
(1, '老王', '2018-02-27 17:47:08', '男', '北京'),
(2, '熊大', '2018-03-02 15:09:37', '女', '上海'),
(3, '熊二', '2018-03-04 11:34:34', '女', '深圳'),
(4, '光头强', '2018-03-04 12:04:06', '男', '广州');

4. 配置 Spring JDBC

接下来,我们在 Spring 配置文件中添加数据库连接池和 JdbcTemplate 配置:

applicationContext.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 配置连接池 DriverManagerDataSource --><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo"/><property name="username" value="root"/><property name="password" value="2020"/></bean><!-- 配置 JdbcTemplate --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/></bean>
</beans>

5. 创建实体类

在 Java 中,我们需要为 user 表创建一个实体类 User,该类的属性应与数据库表的列对应:

public class User {private Integer id;private String username;private Date birthday;private String sex;private String address;// getters and setters
}

6. 使用 JdbcTemplate 实现增、删、改、查操作

插入数据
@Test
public void testInsert() {String sql = "INSERT INTO user (username, address) VALUES (?, ?)";jdbcTemplate.update(sql, "李连杰", "上海");
}
更新数据
@Test
public void testUpdate() {String sql = "UPDATE user SET username = ?, address = ? WHERE id = ?";int result = jdbcTemplate.update(sql, "稳杰", "南海", 2);System.out.println("更新的记录数: " + result);
}
删除数据
@Test
public void testDelete() {String sql = "DELETE FROM user WHERE id = ?";int result = jdbcTemplate.update(sql, 18);System.out.println("删除的记录数: " + result);
}
查询数据(单表查询)
@Test
public void testQueryList() {String sql = "SELECT * FROM user WHERE address LIKE '%京%'";List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));System.out.println("查询结果:");for (User user : users) {System.out.println(user);}
}
查询单个对象
@Test
public void testQueryForObject() {String sql = "SELECT * FROM user WHERE id = ?";User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), 1);System.out.println(user);
}

7. Spring JDBC 优点

  • 简化数据库操作JdbcTemplate 封装了 JDBC 操作,减少了开发人员手动处理数据库连接、异常捕获、资源释放等的工作。
  • 降低代码冗余:对于同类型的操作(如执行增删改查),不再需要写重复的代码,减少了开发工作量。
  • 支持事务管理:Spring JDBC 与 Spring 的事务管理无缝集成,能有效管理数据库事务。
  • 灵活性高:尽管 Spring JDBC 封装了很多常见操作,但它并没有限制开发人员的操作,开发者可以使用原生 SQL 执行任何复杂的数据库操作。

8. 小结

        通过使用 Spring JDBC 和 JdbcTemplate,我们可以大大简化数据库操作。Spring JDBC 提供了高效的资源管理、异常处理、SQL 执行等能力,使得开发人员能够更加专注于业务逻辑的实现,而不必纠结于底层的数据库操作细节。结合 Spring 的事务管理机制,可以保证数据库操作的可靠性和一致性。

        Spring JDBC 的强大功能,使其在许多中小型项目中成为数据库操作的首选方案,尤其是在不需要 ORM(如 Hibernate)框架的情况下,Spring JDBC 提供了简洁而高效的数据库访问方式。


http://www.ppmy.cn/devtools/155355.html

相关文章

ES2021+新特性、常用函数

一、ES2021新特性 ES2021 数字分隔符 let num 1234567 let num2 1_234_567 Promise.any 与 Promise.all 类似&#xff0c;Promise.any 也接受一个 Promise 的数组。当其中任何一个 Promise 完成&#xff08;fullfill&#xff09;时&#xff0c;就返回那个已经有完成值的 …

WPS怎么使用latex公式?

1、下载并安装mathtype https://blog.csdn.net/weixin_43135178/article/details/125143654?sharetypeblogdetail&sharerId125143654&sharereferPC&sharesourceweixin_43135178&spm1011.2480.3001.8118 2、将mathtype嵌入在WPS MathType面板嵌入器,免费工具…

【huawei】云计算的备份和容灾

目录 1 备份和容灾 2 灾备的作用&#xff1f; ① 备份的作用 ② 容灾的作用 3 灾备的衡量指标 ① 数据恢复时间点&#xff08;RPO&#xff0c;Recoyery Point Objective&#xff09; ② 应用恢复时间&#xff08;RTO&#xff0c;Recoyery Time Objective&#xff09; 4…

Excel 技巧22 - Ctrl+D 向下复制(★★),复制同间距图形

本文讲Excel中CtrlD 向下复制的用法。 这个是我特别喜欢和常用的功能&#xff0c;操作简单&#xff0c;功能强大。 1&#xff0c;CtrlD向下复制 1-1&#xff0c;单个单元格复制 最为常用的就是一个单元格的&#xff0c;就像下面这样的&#xff0c;也不用选中&#xff0c; 就…

基于GS(Gaussian Splatting)的机器人Sim2Real2Sim仿真平台

项目地址&#xff1a;RoboGSim 背景简介 已有的数据采集方法中&#xff0c;遥操作&#xff08;下左&#xff09;是数据质量高&#xff0c;但采集成本高、效率低下&#xff1b;传统仿真流程成本低&#xff08;下右&#xff09;&#xff0c;但真实度&#xff08;如纹理、物理&…

在Windows中 基于Oracle GoldenGate (OGG)进行MySQL-gt;MySQL数据库同步配置(超详细)_ogg-15146

注意&#xff1a;源端与目标端都需要进行安装Oracle GoldenGate 四、Oracle GoldenGate配置 以下为Source&#xff08;同步的数据源&#xff09;Oracle GoldenGate配置 1、Oracle GoldenGate&#xff08;源端&#xff09; &#xff08;1&#xff09;、在源端服务器安装的OG…

Miniconda 安装及使用

文章目录 前言1、Miniconda 简介2、Linux 环境说明2.1、安装2.2、配置2.3、常用命令2.4、常见问题及解决方案 前言 在 Python 中&#xff0c;“环境管理”是一个非常重要的概念&#xff0c;它主要是指对 Python 解释器及其相关依赖库进行管理和隔离&#xff0c;以确保开发环境…

.strip()用法

.strip("") 是 Python 字符串方法 strip() 的一个用法&#xff0c;它会去除字符串两端指定字符集中的字符。 基本语法&#xff1a; string.strip([chars])string: 这是你要操作的字符串。chars: 可选参数&#xff0c;表示你想要去除的字符集&#xff08;默认为空格…