【Java 进阶篇】使用 JDBCTemplate 执行 DML 语句详解

在这里插入图片描述

JDBCTemplate 是 Spring 框架中的一个核心模块,用于简化 JDBC 编程,使数据库操作更加便捷和高效。在本文中,我们将重点介绍如何使用 JDBCTemplate 执行 DML(Data Manipulation Language)语句,包括插入、更新和删除操作。我们将提供详细的步骤和示例代码,以帮助基础小白更好地理解和使用这一功能。

1. 引入依赖

首先,您需要在项目中引入 Spring 的相关依赖,包括 Spring Core 和 Spring JDBC。您可以使用 Maven 或 Gradle 等构建工具来管理依赖。

如果使用 Maven,可以在 pom.xml 文件中添加以下依赖:

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.10</version> <!-- 使用最新版本 --></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.10</version> <!-- 使用最新版本 --></dependency><!-- 其他依赖 -->
</dependencies>

2. 配置数据源和 JDBCTemplate

在 Spring 应用程序中,通常使用数据源(DataSource)来管理数据库连接。您需要配置数据源并将其注入到 JDBCTemplate 中。以下是一个简单的配置示例:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/mydatabase" /><property name="username" value="root" /><property name="password" value="password" />
</bean><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource" />
</bean>

上述配置示例中,我们使用 DriverManagerDataSource 创建了一个数据源,并将其注入到了 JdbcTemplate 中。

3. 执行插入操作

插入单条记录

要执行插入操作,首先创建一个 SQL 插入语句,然后使用 JDBCTemplate 的 update 方法执行它。以下是一个插入单条记录的示例:

import org.springframework.jdbc.core.JdbcTemplate;public class EmployeeDao {private JdbcTemplate jdbcTemplate;// 构造函数注入 JdbcTemplatepublic EmployeeDao(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public void insertEmployee(Employee employee) {String sql = "INSERT INTO employees (first_name, last_name, email) VALUES (?, ?, ?)";jdbcTemplate.update(sql, employee.getFirstName(), employee.getLastName(), employee.getEmail());}
}

在上述示例中,我们创建了一个名为 EmployeeDao 的数据访问对象(DAO),它包含一个 insertEmployee 方法,用于插入单条记录。我们使用 ? 占位符来代替实际的参数值,并将参数值传递给 update 方法。这可以防止 SQL 注入攻击,提高了安全性。

插入多条记录

如果要插入多条记录,可以使用 JDBCTemplate 的批处理功能。以下是一个示例:

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;public class EmployeeDao {private JdbcTemplate jdbcTemplate;// 构造函数注入 JdbcTemplatepublic EmployeeDao(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public void insertEmployees(List<Employee> employees) {String sql = "INSERT INTO employees (first_name, last_name, email) VALUES (?, ?, ?)";// 使用 BatchPreparedStatementSetter 来设置参数BatchPreparedStatementSetter setter = new BatchPreparedStatementSetter() {@Overridepublic void setValues(PreparedStatement ps, int i) throws SQLException {Employee employee = employees.get(i);ps.setString(1, employee.getFirstName());ps.setString(2, employee.getLastName());ps.setString(3, employee.getEmail());}@Overridepublic int getBatchSize() {return employees.size();}};jdbcTemplate.batchUpdate(sql, setter);}
}

在上述示例中,我们使用 batchUpdate 方法来执行批处理插入操作。

4. 执行更新操作

更新操作用于修改数据库中已存在的记录。您可以使用 JDBCTemplate 的 update 方法执行更新操作。以下是一个更新操作的示例:

import org.springframework.jdbc.core.JdbcTemplate;public class EmployeeDao {private JdbcTemplate jdbcTemplate;// 构造函数注入 JdbcTemplatepublic EmployeeDao(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public void updateEmployee(Employee employee) {String sql = "UPDATE employees SET first_name = ?, last_name = ?, email = ? WHERE id = ?";jdbcTemplate.update(sql, employee.getFirstName(), employee.getLastName(), employee.getEmail(), employee.getId());}
}

在上述示例中,我们创建了一个名为 updateEmployee 的方法,用于更新员工记录。我们使用 SQL 更新语句,并传递员工对象的属性值作为参数。

5. 执行删除操作

删除操作用于从数据库中删除记录。您可以使用 JDBCTemplate 的 update 方法执行删除操作。以下是一个删除操作的示例:

import org.springframework.jdbc.core.JdbcTemplate;public class EmployeeDao {private JdbcTemplate jdbcTemplate;// 构造函数注入 JdbcTemplatepublic EmployeeDao(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public void deleteEmployee(int employeeId) {String sql = "DELETE FROM employees WHERE id = ?";jdbcTemplate.update(sql, employeeId);}
}

在上述示例中,我们创建了一个名为 deleteEmployee 的方法,用于删除员工记录。我们使用 SQL 删除语句,并传递员工的唯一标识(通常是 ID)作为参数。

6. 错误处理

在实际应用中,执行 DML 操作时可能会出现各种错误和异常,例如数据库连接失败、SQL 语法错误、数据完整性约束等。为了保证代码的健壮性,应该捕获并处理这些错误和异常。以下是一个简单的错误处理示例:

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.SQLExceptionTranslator;public class EmployeeDao {private JdbcTemplate jdbcTemplate;// 构造函数注入 JdbcTemplatepublic EmployeeDao(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public void insertEmployee(Employee employee) {String sql = "INSERT INTO employees (first_name, last_name, email) VALUES (?, ?, ?)";try {jdbcTemplate.update(sql, employee.getFirstName(), employee.getLastName(), employee.getEmail());} catch (DataAccessException e) {// 数据访问异常处理SQLExceptionTranslator translator = jdbcTemplate.getExceptionTranslator();if (translator != null) {throw translator.translate("Insert employee failed", sql, e);} else {throw new RuntimeException("Insert employee failed", e);}}}
}

在上述示例中,我们使用了 Spring 的异常翻译器(SQLExceptionTranslator)来将数据库异常转换为 Spring 的通用数据访问异常(DataAccessException)。这有助于提供更加友好的错误信息和异常处理。

7. 总结

通过 JDBCTemplate,我们可以方便地执行 DML(插入、更新、删除)操作,使数据库访问更加简单和安全。在实际应用中,务必注意错误处理和异常处理,以保证系统的稳定性和可靠性。希望本文能帮助您更好地理解和使用 JDBCTemplate 执行 DML 操作。

示例代码中的 Employee 类是一个简单的 POJO,用于表示员工信息。在实际应用中,您可以根据自己的业务需求定义相应的实体类。希望这篇文章对您有所帮助,谢谢阅读!

这是关于使用 JDBCTemplate 执行 DML 语句的文章的结尾部分。如果您还有其他问题或需要更多信息,请随时提出。希望这篇文章对您有所帮助,谢谢阅读!

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/149751.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SNP Glue:SAP数据导入到其他系统的多种方式

SAP是一款功能强大的企业资源计划&#xff08;ERP&#xff09;软件&#xff0c;许多企业依赖SAP来管理和处理其核心业务数据。然而&#xff0c;有时候企业需要将SAP中的数据导入到其他系统中&#xff0c;以实现更广泛的数据共享和集成&#xff0c;便于企业实现数据智能。本文将…

计算摄像技术02 - 颜色空间

一些计算摄像技术知识内容的整理&#xff1a;颜色视觉与感知特性、颜色空间和基于彩色滤镜阵列的彩色感知。 文章目录 一、颜色视觉与感知特性 &#xff08;1&#xff09;色调 &#xff08;2&#xff09;饱和度 &#xff08;3&#xff09;明度 二、颜色空间 &#xff08;1&…

[架构之路-228]:目标系统 - 纵向分层 - 计算机硬件与体系结构 - 硬盘存储结构原理:如何表征0和1,即如何存储0和1,如何读数据,如何写数据(修改数据)

目录 前言&#xff1a; 一、磁盘的盘面组成 1.1 磁盘是什么 ​编辑1.2 磁盘存储介质 1.3 磁盘数据的组织 1.3.1 分层组织&#xff1a;盘面号 1.3.2 扇区和磁道 1.3.3 数据 1.3.4 磁盘数据0和1的存储方式 1.3.5 磁盘数据0和1的修正方法 1.3.6 磁盘数据0和1的读 二、…

基于腾讯云的OTA远程升级

一、OTA OTA即over the air,是一种远程固件升级技术&#xff0c;它允许在设备已经部署在现场运行时通过网络远程更新其固件或软件。OTA技术有许多优点&#xff0c;比如我们手机系统有个地方做了优化&#xff0c;使用OTA技术我们就不用召回每部手机&#xff0c;直接通过云端就可…

(一)正点原子STM32MP135移植——准备

一、简述 使用板卡&#xff1a;正点原子的ATK-DLMP135 V1.2 从i.mx6ull学习完过来&#xff0c;想继续学习一下移植uboot和内核的&#xff0c;但是原子官方没有MP135的移植教程&#xff0c;STM32MP157的移植教程用的又是老版本的代码&#xff0c;ST官方更新后的代码不兼容老版本…

Linux中的wc命令

2023年10月6月&#xff0c;周五晚上 目录 wc命令的主要功能和用法如下:统计文件行数、字数和字节数只统计行数只统计字数只统计字节数 wc命令在Linux/Unix系统中是word count的缩写,它用来统计文件的行数、字数和字节数。 wc命令的主要功能和用法如下: 统计文件行数、字数和字…

mac清理垃圾的软件有哪些?这三款我最推荐

没错&#xff0c;Mac电脑真的好用&#xff0c;但是清理系统垃圾可不是件容易的事。由于Mac系统的封闭性&#xff0c;系统的缓存垃圾常常隐藏得让人发现不了。不过&#xff0c;别担心&#xff01;有一些专业的Mac清理软件可以帮你解决这一系列问题&#xff0c;让清理垃圾变得轻松…

踩大坑ssh免密登录详细讲解

目 录 问题背景 环境说明 免密登录流程说明 1.首先要在对应的用户主机名的情况下生成密钥对&#xff0c;在A服务器执行 2.将A服务器d公钥拷贝到B服务器对应的位置 3.在A服务器访问B服务器 免密登录流程 0.用户说明 1.目前现状演示 2.删除B服务器.ssh 文件夹下面的…

【将文本编码为图像灰度级别】以 ASCII 编码并与灰度级别位混合将文本字符串隐藏到图像像素的最低位中,使其不明显研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

我在 NPM 发布了新包: con-colors

链接地址&#xff1a;npmjs.com con-colors 安装依赖 yarn add con-colors使用 导入&#xff1a; import { print } from "con-colors";使用&#xff1a; print.succ("成功的消息"); print.err("失败的消息")例子&#xff1a; import { p…

OpenResty编译安装详解

文章目录 一、概述1、OpenResty是什么2、官方文档 二、cengos安装OpenResty1、从官网下载2、目录结构3、编译安装 一、概述 1、OpenResty是什么 OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台&#xff0c;其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖…

连续波雷达相关内容简介

连续波雷达(CW雷达)连续发射高频信号。回波信号被永久接收和处理。 一、未调制连续波雷达 未调制的连续波雷达除了振荡的相位之外没有其他时间参考。它只能用于测量小于波长的距离。以上的一切都极为含糊。因此,它只能用作多普勒雷达或控制已知距离的恒定性。 二、调频连…

基于SSM+Vue的鲜花销售系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

MySQL概念

原理定义概念 定义 数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库 数据库是长期储存在计算机内、有组织的、可共享的数据集合 分类&#xff1a; &#xff08;1&#xff09;非结构化数据&#xff1a; 数据相对来讲没有固定的特点&#…

Go基础之变量和常量

Go基础之变量和常量 文章目录 Go基础之变量和常量一. 标识符、关键字、内置类型和函数1.1 标识符1.2 关键字1.3 保留字1.4 内置类型1.4.1 值类型&#xff1a;1.4.2 引用类型&#xff1a;(指针类型)1.5 内置函数1.6 内置接口error 二.Go变量命名规范2.1 采用驼峰体命名2.2 简单、…

汽车驾驶任务的隐马尔可夫模型识别方法研究

汽车驾驶任务的隐马尔可夫模型识别方法研究 一、Introduction 自动驾驶汽车经过了几十年的发展&#xff0c;是目前国内外汽车行业中的重要研究方向。自 动驾驶汽车的智能化需要车辆能够有类“人”的行为&#xff0c;在决策策略上可以满足人的心理 需求。人在驾驶过程中&#…

计算机专业毕业设计项目推荐10-饮食搭配平台(Go+微信小程序+Mysql)

饮食搭配平台&#xff08;Go微信小程序Mysql&#xff09; **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计流程…

什么是TF-A项目的长期支持?

安全之安全(security)博客目录导读 问题&#xff1a;Trusted Firmware-A社区每六个月发布一次代码。然而&#xff0c;对于生产中的平台&#xff0c;该策略在维护、重要软件修复的向后兼容性、获得最新的安全缓解措施和整体产品生命周期管理方面不具备可扩展性。 开源软件项目&…

【CMU15-445 Part-15】Query Planning Optimization II

Part15-Query Planning & Optimization II Selection Statistics 维护每张表中的基本主要信息也就是tuple数量 N R N_R NR​以及每个属性中不同值的数量 V ( A , R ) V(A,R) V(A,R)&#xff0c; N R N_R NR​关系R中的元组数量&#xff0c;单独维护&#xff0c;不能用pag…

【网络编程】UDP数据报套接字编程和TCP流套接字编程

文章目录 1. 网络编程基础1.1 为什么需要网络编程&#xff1f;1.2 网络编程是什么&#xff1f;1.3 概念 2. Socket套接字3. UDP数据报套接字编程3.1 DatagramSocket API3.2 DatagramPacket API3.3 InetSocketAddress API 4. UDP构建服务端客户端&#xff08;一发一收&#xff0…