使用 Spring Boot 3.3 和 JdbcTemplate 操作 MySQL 数据库

在这里插入图片描述

在现代的 Java 应用开发中,Spring Boot 提供了强大的工具来简化数据库操作。JdbcTemplate 是 Spring 提供的一个核心类,用于简化 JDBC 操作,减少样板代码。本文将介绍如何在 Spring Boot 3.3 项目中使用 JdbcTemplate 来操作 MySQL 数据库,并通过类图展示关键类之间的关系。

1. 项目依赖配置

在 Spring Boot 3.3 项目中,使用 JdbcTemplate 操作 MySQL 数据库需要以下依赖:
spring-boot-starter-jdbc:提供 JdbcTemplate 和其他 JDBC 相关功能。
mysql-connector-j:MySQL 的 JDBC 驱动,用于连接 MySQL 数据库。
在 pom.xml 文件中添加以下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope>
</dependency>

2. 数据库配置

spring:datasource:url: jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTCusername: your_usernamepassword: your_passworddriver-class-name: com.mysql.cj.jdbc.Driver

3. 关键类及其关系

在这里插入图片描述

3.1 实体类(User)

实体类 User 对应数据库表 users。它包含字段 id、name 和 email,以及相应的 getter 和 setter 方法。

public class User {private Long id;private String name;private String email;// Getters and Setterspublic Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}

3.2 DAO 类(UserDao)

DAO 类 UserDao 封装了与数据库表相关的操作。它注入了 JdbcTemplate 对象,并通过它执行 SQL 语句。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;import java.util.List;@Repository
public class UserDao {@Autowiredprivate JdbcTemplate jdbcTemplate;public User findUserById(Long id) {String sql = "SELECT * FROM users WHERE id = ?";return jdbcTemplate.queryForObject(sql, new Object[]{id}, new UserRowMapper());}public List<User> findAllUsers() {String sql = "SELECT * FROM users";return jdbcTemplate.query(sql, new UserRowMapper());}public int insertUser(User user) {String sql = "INSERT INTO users (name, email) VALUES (?, ?)";return jdbcTemplate.update(sql, user.getName(), user.getEmail());}public int updateUser(User user) {String sql = "UPDATE users SET name = ?, email = ? WHERE id = ?";return jdbcTemplate.update(sql, user.getName(), user.getEmail(), user.getId());}public int deleteUser(Long id) {String sql = "DELETE FROM users WHERE id = ?";return jdbcTemplate.update(sql, id);}
}

3.3 RowMapper 接口

RowMapper 是一个接口,用于将 ResultSet 中的每一行数据映射为一个对象。UserRowMapper 是 RowMapper 的具体实现,用于将查询结果映射为 User 对象。

import org.springframework.jdbc.core.RowMapper;import java.sql.ResultSet;
import java.sql.SQLException;public class UserRowMapper implements RowMapper<User> {@Overridepublic User mapRow(ResultSet rs, int rowNum) throws SQLException {User user = new User();user.setId(rs.getLong("id"));user.setName(rs.getString("name"));user.setEmail(rs.getString("email"));return user;}
}

4. 注意事项

4.1 SQL 注入风险

确保使用参数化查询,避免直接拼接 SQL 语句,以防止 SQL 注入攻击。

4.2 异常处理

捕获并处理可能的 DataAccessException,这是 JdbcTemplate 抛出的异常。

4.3 资源管理

JdbcTemplate 会自动管理数据库连接,无需手动关闭 Connection、Statement 或 ResultSet。

4.4 性能优化

对于复杂的查询,可以考虑使用 PreparedStatement 或 PreparedStatementSetter 来提高性能。

5. 总结

本文介绍了如何在 Spring Boot 3.3 项目中使用 JdbcTemplate 操作 MySQL 数据库。我们定义了实体类 User,创建了 DAO 类 UserDao,并使用 JdbcTemplate 执行数据库操作。通过 RowMapper 接口,我们将查询结果映射为 User 对象。最后,我们通过类图展示了关键类之间的关系。
希望本文对你有所帮助!如果有任何问题或建议,欢迎随时留言。

PS:以我之思,借AI之力

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

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

相关文章

如何做好一份技术文档?(下篇)

如何做好一份技术文档&#xff1f;&#xff08;下篇&#xff09; 下篇&#xff1a;文档体验的极致优化 ——从可用性到愉悦性的跨越 文档用户体验地图 新手路径 专家路径 [安装] → [配置] → [示例] [API] → [参数] → [源码] │ ▲ …

Windows 12确认没了,Win11 重心偏移修Bug

微软悄然搁置了传说中的Windows 12开发计划&#xff0c;转身将精力投入到Windows 11的持续进化中。今年秋季的主角已经确定——Windows 11 25H2&#xff0c;它将于9月或10月间与我们正式见面。 与去年24H2的大规模更新不同&#xff0c;25H2更像是场精心策划的“功能解锁”。微软…

JavaScript中的正则表达式:文本处理的瑞士军刀

JavaScript中的正则表达式&#xff1a;文本处理的瑞士军刀 在编程世界中&#xff0c;正则表达式&#xff08;Regular Expression&#xff0c;简称RegExp&#xff09;被誉为“文本处理的瑞士军刀”。它能够高效地完成字符串匹配、替换、提取和验证等任务。无论是前端开发中的表…

基于LEAP模型在能源环境发展、碳排放建模预测及分析中实践应用

在国家“3060”碳达峰碳中和的政策背景下&#xff0c;如何寻求经济-能源-环境的平衡有效发展是国家、省份、城市及园区等不同级别经济体的重要课题。根据国家政策、当地能源结构、能源技术发展水平以及相关碳排放指标制定合理有效的低碳能源发展规划需要以科学准确的能源环境发…

Python爬虫实战:研究RoboBrowser库相关技术

1. 引言 1.1 研究背景与意义 随着电子商务的快速发展,商品信息呈现爆炸式增长。据 Statista 数据显示,2025 年全球电子商务销售额预计将达到 7.4 万亿美元,海量的商品数据蕴含着巨大的商业价值。对于电商企业而言,及时获取竞争对手的产品信息、价格动态和用户评价,能够帮…

JVM垃圾回收器-ZGC

一、概述 ZGC&#xff08;Z Garbage Collector&#xff09;是一种高效且可扩展的低延迟垃圾回收器。在垃圾回收过程中&#xff0c;ZGC通过优化算法和硬件支持&#xff0c;将Stop-The-World&#xff08;STW&#xff09;时间控制在一毫秒以内&#xff0c;使其成为追求低延迟应用…

区间动态规划

线性 DP 的一种&#xff0c;简称为「区间 DP」。以「区间长度」划分阶段&#xff0c;以两个坐标&#xff08;区间的左、右端点&#xff09;作为状态的维度。一个状态通常由被它包含且比它更小的区间状态转移而来。 一、概念 间 DP 的主要思想就是&#xff1a;先在小区间内得到…

4. 数据类型

4.1 数据类型分类 分类 数据类型 说明 数值类型 BIT(M) 位类型。M指定位数&#xff0c;默认值1&#xff0c;范围1 - 64 TINYINT [UNSIGNED] 带符号的范围 -128 ~ 127&#xff0c;无符号范围0 ~ 255&#xff0c;默认有符号 BOOL 使用0和1表示真和假 SMALLINT [UNSIGNED] 带符号是…

设计模式-2 结构型模式

一、代理模式 1、举例 海外代购 2、代理基本结构图 3、静态代理 1、真实类实现一个接口&#xff0c;代理类也实现这个接口。 2、代理类通过真实对象调用真实类的方法。 4、静态代理和动态代理的区别 1、静态代理在编译时就已经实现了&#xff0c;编译完成后代理类是一个实际…

vue+element-ui一个页面有多个子组件组成。子组件里面有各种表单,实现点击enter实现跳转到下一个表单元素的功能。

一个父组件里面是有各个子组件的form表单组成的。 我想实现点击enter。焦点直接跳转到下一个表单元素。 父组件就是由各个子组件构成 子组件就像下图一样的都有个el-form的表单。 enterToTab.js let enterToTab {}; (function() {// 返回随机数enterToTab.addEnterListener …

Open SSL 3.0相关知识以及源码流程分析

Open SSL 3.0相关知识以及源码流程分析 编译 windows环境编译1、工具安装 安装安装perl脚本解释器、安装nasm汇编器(添加到环境变量)、Visual Studio编译工具 安装dmake ppm install dmake # 需要过墙2、开始编译 # 1、找到Visual Studio命令行编译工具目录 或者菜单栏直接…

【Redis】笔记|第5节|Redisson实现高并发分布式锁核心源码

一、加锁流程 1. 核心方法调用链 RLock lock redisson.getLock("resource"); lock.lock(); // 阻塞式加锁↳ lockInterruptibly()↳ tryAcquire(-1, leaseTime, unit) // leaseTime-1表示启用看门狗↳ tryAcquireAsync()↳ tryLockInnerAsync() // 执行Lua脚本 2…

基于React + TypeScript构建高度可定制的QR码生成器

前言 在现代Web应用中&#xff0c;QR码已成为连接线上线下的重要桥梁。本文将详细介绍如何使用React TypeScript Vite构建一个功能强大、高度可定制的QR码生成器&#xff0c;支持背景图片、文本叠加、HTML模块、圆角导出等高级功能。 前往试试 项目概述 技术栈 前端框架:…

【MATLAB代码】制导——三点法,二维平面下的例程|运动目标制导,附完整源代码

三点法制导是一种导弹制导策略,主要用于确保导弹能够准确追踪并击中移动目标。该方法通过计算导弹、目标和制导站之间的相对位置关系,实现对目标的有效制导。 本文给出MATLAB下的三点法例程,模拟平面上捕获运动目标的情况订阅专栏后可直接查看源代码,粘贴到MATLAB空脚本中即…

Ubuntu22.04 安装 IsaacSim 4.2.0

1. 从官网下载 IsaacSim 4.2.0 安装包 https://download.isaacsim.omniverse.nvidia.com/isaac-sim-standalone%404.2.0-rc.18%2Brelease.16044.3b2ed111.gl.linux-x86_64.release.zip 2. 查阅 Workstation Installation 安装方式 Workstation Installation — Isaac Sim Do…

开源量子模拟引擎:Quantum ESPRESSO本地部署教程,第一性原理计算轻松入门!

一、介绍 Quantum ESPRESSO 是一个用于电子结构计算和纳米尺度材料建模的开源计算机代码集成套件&#xff0c;专门用于进行第一性原理&#xff08;第一性原理&#xff09;计算&#xff0c;涵盖了电子结构、晶体学和材料性能的模拟。 Quantum ESPRESSO GPU 版本支持GPU加速&am…

PVE 虚拟机安装 Ubuntu Server V24 系统 —— 一步一步安装配置基于 Ubuntu Server 的 NodeJS 服务器详细实录1

前言 最近在基于 NodeJS V22 写一个全栈的项目&#xff0c;写好了&#xff0c;当然需要配置服务器部署啦。这个过程对于熟手来说&#xff0c;还是不复杂的&#xff0c;但是对于很多新手来说&#xff0c;可能稍微有点困难。所以&#xff0c;我把整个过程全部记录一下。 熟悉我…

【JUC】深入解析 JUC 并发编程:单例模式、懒汉模式、饿汉模式、及懒汉模式线程安全问题解析和使用 volatile 解决内存可见性问题与指令重排序问题

单例模式 单例模式确保某个类在程序中只有一个实例&#xff0c;避免多次创建实例&#xff08;禁止多次使用new&#xff09;。 要实现这一点&#xff0c;关键在于将类的所有构造方法声明为private。 这样&#xff0c;在类外部无法直接访问构造方法&#xff0c;new操作会在编译…

2. 库的操作

2.1 创建数据库 语法&#xff1a; CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification: [DEFAULT] CHARACTER SET charset_name # 字符集: 存储编码 [DEFAULT] COLLATE collation_name # 校验集: 比较/选择/读…

道可云人工智能每日资讯|北京农业人工智能与机器人研究院揭牌

道可云人工智能&元宇宙每日简报&#xff08;2025年6月3日&#xff09;讯&#xff0c;今日人工智能&元宇宙新鲜事有&#xff1a; 北京农业人工智能与机器人研究院揭牌 5月30日&#xff0c;北京市农业农村局、北京市海淀区人民政府、北京市农林科学院共同主办北京农业人…