当前位置: 首页 > news >正文

Spring JDBC 的开发步骤(注解方式)

Spring JDBC 的开发步骤主要包括以下关键环节,结合代码示例说明如下:


1. 添加依赖

pom.xml 中引入 Spring JDBC 和数据库驱动依赖(以 HikariCP 连接池和 MySQL 为例):

<!-- Spring JDBC -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.23</version>
</dependency><!-- 数据库驱动 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version>
</dependency><!-- 连接池(可选,推荐 HikariCP) -->
<dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>4.0.3</version>
</dependency>

2. 配置数据源

通过 Java Config 配置数据源(推荐)或 XML。

Java Config 示例
@Configuration
public class DataSourceConfig {@Beanpublic DataSource dataSource() {HikariDataSource dataSource = new HikariDataSource();dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/testdb");dataSource.setUsername("root");dataSource.setPassword("password");dataSource.setMaximumPoolSize(10);return dataSource;}
}

3. 创建 JdbcTemplate 实例

DataSource 注入到 JdbcTemplate 中:

@Configuration
public class JdbcConfig {@Autowiredprivate DataSource dataSource;@Beanpublic JdbcTemplate jdbcTemplate() {return new JdbcTemplate(dataSource);}
}

4. 编写 DAO 层

使用 JdbcTemplate 执行 SQL 操作,常用方法包括:

  • update(): 执行增删改操作
  • query(): 查询数据(配合 RowMapperResultSetExtractor
  • queryForObject(): 查询单条记录
示例:UserDao
@Repository
public class UserDao {@Autowiredprivate JdbcTemplate jdbcTemplate;// 插入用户public void insertUser(User user) {String sql = "INSERT INTO users (name, email) VALUES (?, ?)";jdbcTemplate.update(sql, user.getName(), user.getEmail());}// 查询所有用户public List<User> findAllUsers() {String sql = "SELECT * FROM users";return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));}// 根据ID查询用户public User findUserById(int id) {String sql = "SELECT * FROM users WHERE id = ?";return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(User.class));}
}

5. 异常处理

Spring JDBC 将 SQLException 转换为 DataAccessException,可通过 @ExceptionHandler 统一处理:

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(DataAccessException.class)public ResponseEntity<String> handleDataAccessException(DataAccessException ex) {return ResponseEntity.status(500).body("数据库操作失败: " + ex.getMessage());}
}

6. 事务管理(可选)

在 Service 层使用 @Transactional 管理事务:

@Service
public class UserService {@Autowiredprivate UserDao userDao;@Transactionalpublic void createUser(User user) {userDao.insertUser(user);// 其他数据库操作(事务会回滚)}
}

7. 测试 DAO 层

使用 Spring Test 进行单元测试:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {DataSourceConfig.class, JdbcConfig.class})
public class UserDaoTest {@Autowiredprivate UserDao userDao;@Testpublic void testFindAllUsers() {List<User> users = userDao.findAllUsers();Assert.assertNotNull(users);}
}

补充说明

  • 简化配置(Spring Boot)
    在 Spring Boot 中,只需添加 spring-boot-starter-jdbc 依赖,自动配置 HikariDataSourceJdbcTemplate,无需手动配置数据源。

  • 参数绑定
    使用 ? 占位符防止 SQL 注入,JdbcTemplate 自动处理参数预编译。

  • 结果映射
    BeanPropertyRowMapper 自动将结果集映射到 POJO,需确保字段名与类属性一致。


通过以上步骤,即可高效使用 Spring JDBC 进行数据库操作,避免冗余代码,同时保证资源安全和事务一致性。

相关文章:

Spring JDBC 的开发步骤(注解方式)

Spring JDBC 的开发步骤主要包括以下关键环节&#xff0c;结合代码示例说明如下&#xff1a; 1. 添加依赖 在 pom.xml 中引入 Spring JDBC 和数据库驱动依赖&#xff08;以 HikariCP 连接池和 MySQL 为例&#xff09;&#xff1a; <!-- Spring JDBC --> <dependency…...

蓝桥杯 15.小数第n位

小数第n位 原题目链接 题目描述 我们知道&#xff0c;整数做除法时&#xff0c;有时会得到有限小数&#xff0c;有时会得到无限循环小数。 如果我们把有限小数的末尾加上无限多个 0&#xff0c;它们就具有了统一的形式。 本题的任务是&#xff1a;在上述约定下&#xff0c…...

[计算机科学#1]:计算机的前世今生,从算盘到IBM的演变之路

【核知坊】&#xff1a;释放青春想象&#xff0c;码动全新视野。 我们希望使用精简的信息传达知识的骨架&#xff0c;启发创造者开启创造之路&#xff01;&#xff01;&#xff01; 内容摘要&#xff1a;在我们的日常生活中&#xff0c;计算机无处不在——…...

【LangChain4j】AI 第一弹:LangChain4j 的理解

一、LangChain4j 的简介 1.1 LangChain4j的背景 LangChain4j&#xff08;LangChain for java&#xff09; 的目标是简化将大语言模型&#xff08;LLM - Large Language Model&#xff09;集成到 Java 应用程序中的过程。 官网&#xff1a; https://docs.langchain4j.dev 202…...

深入解析C++ STL Stack:后进先出的数据结构

一、引言 在计算机科学中&#xff0c;栈&#xff08;Stack&#xff09;作为一种遵循后进先出&#xff08;LIFO&#xff09;​原则的数据结构&#xff0c;是算法设计和程序开发的基础构件。C STL中的stack容器适配器以简洁的接口封装了底层容器的操作&#xff0c;为开发者提供了…...

3.2 Agent核心能力:感知、规划、决策与执行

智能代理&#xff08;Agent&#xff09;是一种能够在复杂环境中自主运作的计算实体&#xff0c;其智能行为依赖于四大核心能力&#xff1a;感知&#xff08;Perception&#xff09;、规划&#xff08;Planning&#xff09;、决策&#xff08;Decision-making&#xff09;和执行…...

(即插即用模块-特征处理部分) 四十一、(2024) MSAA 多尺度注意力聚合模块

文章目录 1、Multi-Scale Attention Aggregation Module2、代码实现 paper&#xff1a;CM-UNet: Hybrid CNN-Mamba UNet for Remote Sensing Image Semantic Segmentation Code&#xff1a;https://github.com/XiaoBuL/CM-UNet 1、Multi-Scale Attention Aggregation Module 传…...

【速写】hook与fx

文章目录 问题方法方法 1&#xff1a;使用 PyTorch 的 register_forward_hook方法 2&#xff1a;自定义前向传播&#xff08;修改 forward 方法&#xff09;方法 3&#xff1a;使用 output_attentions 或 output_hidden_states方法 4&#xff1a;使用 torch.fx 进行动态追踪总结…...

基于javaweb的SpringBoot扶农助农平台管理系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

用户模块-SpringEvent观察者模式

1. 背景与需求 在很多系统中&#xff0c;我们常常需要对用户的行为进行处理&#xff0c;比如发放奖励、处理通知等。在这个例子中&#xff0c;我们希望在两个场景下发放“改名卡”这个奖励&#xff1a; 用户注册时&#xff1a;当一个新用户注册成功时&#xff0c;我们希望立即发…...

三目云台转动性能稳定性

三目云台是一种具备三个摄像头或观测窗口的云台设备&#xff0c;其转动性能对于实现全方位、多角度的监控或观测至关重要。以下是对三目云台转动的详细分析&#xff1a; 一、转动原理 云台本身是一种摄像机稳定器&#xff0c;通过内置的电机和控制系统实现转动。三目云台则在…...

Python基础语法3

目录 1、函数 1.1、语法格式 1.2、函数返回值 1.3、变量作用域 1.4、执行过程 1.5、链式调用 1.6、嵌套调用 1.7、函数递归 1.8、参数默认值 1.9、关键字参数 2、列表 2.1、创建列表 2.2、下标访问 2.3、切片操作 2.4、遍历列表元素 2.5、新增元素 2.6、查找元…...

45、子类需要重写父类的构造函数嘛,子类自己的构造函数呢?

45、子类需要重写父类的构造函数嘛&#xff0c;子类自己的构造函数呢&#xff1f; 一、子类是否需要重写父类的构造函数&#xff1f; 1. 不需要重写的场景 基类有无参构造函数 若父类&#xff08;基类&#xff09;显式或隐式定义了无参构造函数&#xff0c;子类无需重写构造函…...

C语言 ——— 分支循环语句

目录 分支循环语句 单分支 多分支 switch 分支语句 牛刀小试 判断一个数是否是奇数 输出 1-100之间 的奇数 计算 n 的阶乘 计算 1! 2! 3! ... n! 在一个有序数组中查找具体的某一个数字 打印 100-200 之间的素数 求两个整数的最大公约数 getchar函数 和 putc…...

解耦旧系统的利器:Java 中的适配器模式(Adapter Pattern)实战解析

在现代软件开发中&#xff0c;我们经常需要与旧系统、第三方库或不一致接口打交道。这时候&#xff0c;如果能优雅地整合这些不兼容组件&#xff0c;又不破坏原有结构&#xff0c;就需要一位“翻译官” —— 适配器模式。本文将通过 Java 实例&#xff0c;详细讲解适配器模式的…...

C++学习之游戏服务器开发十五QT登录器实现

目录 1.界面搭建 2.登录客户端步骤分析 3.拼接登录请求实现 4.发送http请求 5.服务器登录请求处理 6.客户端处理服务器回复数据 7.注册页面启动 8.qt启动游戏程序 1.界面搭建 2.登录客户端步骤分析 3.拼接登录请求实现 CGI 程序处理流程 程序员自己写程序处理各种业务 …...

搭建Stable Diffusion图像生成系统实现通过网址访问(Ngrok+Flask实现项目系统公网测试,轻量易部署)

目录 前言 背景与需求 &#x1f3af; 需求分析 核心功能 网络优化 方案确认 1. 安装 Flask 和 Ngrok 2. 构建 Flask 应用 3. 使用 Ngrok 实现内网穿透 4. 测试图像生成接口 技术栈 实现流程 优化目标 实现细节 1. 迁移到Flask 2. 持久化提示词 3. 图像下载功能 …...

第五章:5.3 ESP32物联网应用:阿里云IoT平台与腾讯云IoT平台的数据上传与远程控制

一、阿里云IoT平台接入​​ 1. 准备工作 ​​注册阿里云账号​​ 访问阿里云官网&#xff0c;注册并完成实名认证。​​创建产品和设备​​ 进入​​物联网平台控制台​​ → ​​公共实例​​ → ​​创建产品​​&#xff08;例如产品名称“ESP32_Sensor”&#xff0c;节点…...

【AI News | 20250423】每日AI进展

AI Repos 1、suna Suna是一款完全开源的AI助手&#xff0c;旨在通过自然对话帮助用户轻松完成现实世界的任务。它作为您的数字伙伴&#xff0c;提供研究、数据分析和日常问题解决等功能&#xff0c;并结合强大的能力与直观的界面&#xff0c;理解您的需求并交付成果。Suna的工…...

3.1 Agent定义与分类:自主Agent、协作Agent与混合Agent的特点

随着人工智能技术的快速发展&#xff0c;智能代理&#xff08;Agent&#xff09;作为一种能够感知环境、自主决策并采取行动的计算实体&#xff0c;已成为人工智能领域的重要研究对象和应用工具。特别是在大模型&#xff08;Large Models&#xff09;的赋能下&#xff0c;Agent…...

stack和queue的学习

stack的介绍 stack的文档介绍 stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的&#xff0c;容器适配器即是对特定类封装作为其底层的容器&#xff0c;…...

leetcode-位运算

位运算 371. 两整数之和 题目 给你两个整数 a 和 b &#xff0c;不使用 运算符 和 - &#xff0c;计算并返回两整数之和。 示例 1&#xff1a; 输入&#xff1a; a 1, b 2 输出&#xff1a; 3 示例 2&#xff1a; 输入&#xff1a; a 2, b 3 输出&#xff1a; 5 提示&am…...

《浔川AI翻译v6.1.0问题已修复公告》

《浔川AI翻译v6.1.0问题已修复公告》 尊敬的浔川AI翻译用户&#xff1a; 感谢您对浔川AI翻译的支持与反馈&#xff01;我们已针对 **v6.1.0** 版本中用户反馈的多个问题进行了全面修复&#xff0c;并优化了系统稳定性。以下是本次修复的主要内容&#xff1a; 已修复问题 ✅…...

Unity 创建、读取、改写Excel表格数据

1.导入EPPlus.dll、Excel.dll、Mysql.Data.dll、System.Data.dll&#xff1b;&#xff08;我这里用的是&#xff1a;Unity2017.3.0&#xff09; 2.代码如下&#xff1a; using System.Data; using System.IO; using UnityEngine; using OfficeOpenXml; using UnityEditor; us…...

【阿里云大模型高级工程师ACP习题集】2.3 优化提示词改善答疑机器人回答质量

练习题: 【单选题】在使用大模型进行意图识别时,通过设计特定提示词引导模型生成符合预期回答的方法,其本质是( )。 A. 修改模型本身参数 B. 依靠构造输入激发模型内部已有知识 C. 对模型进行微调 D. 改变模型的训练数据 【多选题】以下哪些属于提示词框架中的要素( )。…...

富文本编辑器实现

&#x1f3a8; 富文本编辑器实现原理全解析 &#x1f4dd; 基本实现路径图 #mermaid-svg-MO1B8a6kAOmD8B6Y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-MO1B8a6kAOmD8B6Y .error-icon{fill:#552222;}#mermaid-s…...

海量粒子特效解决方案:VEG

Unity 官方除了一个 GPU 粒子特效的解决方案&#xff1a;Visual Effect Graph&#xff0c;即 VEG&#xff0c;能支持百万级粒子特效的播放。在性能要求高的使用场景中&#xff0c;这个解决方案就能完美解决原本 Particle System 性能低下的问题。关于 VEG 的基本使用方法参考官…...

Java高频面试之并发编程-06

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;线程上下文切换是什么&#xff1f; 线程上下文切换&#xff08;Thread Context Switching&#xff09;是操作系统中 CPU…...

Windows 同步技术-一次性初始化

组件通常设计为在首次调用时执行初始化任务&#xff0c;而不是加载它们时。 一次性初始化函数可确保此初始化仅发生一次&#xff0c;即使多个线程可能尝试初始化也是如此。 Windows Server 2003 和 Windows XP&#xff1a; 应用程序必须使用 互锁函数 或其他同步机制提供自己的…...

Transformer起源-Attention Is All You Need

这篇笔记主要讲解Attention Is All You Need论文。《Attention Is All You Need》由 Ashish Vaswani 等人撰写&#xff0c;于 2017 年发表在 NIPS&#xff08;Neural Information Processing Systems&#xff09;会议上。它提出了一种全新的神经网络架构——Transformer&#x…...

被裁20240927 --- 视觉目标跟踪算法

永远都像初次见你那样使我心荡漾 参考文献目前主流的视觉目标跟踪算法一、传统跟踪算法1. 卡尔曼滤波&#xff08;Kalman Filter&#xff09;2. 相关滤波&#xff08;Correlation Filter&#xff0c;如KCF、MOSSE&#xff09;3. 均值漂移&#xff08;MeanShift/CamShift&#x…...

每日学习Java之一万个为什么(JUC)

文章目录 Git复习synchronized介绍基本概念特点 使用模板1. 同步方法格式特点 2. 同步代码块格式特点 常见面试题1. synchronized的实现原理&#xff1f;2. synchronized与ReentrantLock的区别&#xff1f;3. synchronized的缺点&#xff1f;4. 死锁的四个必要条件&#xff1f;…...

代码分享:python实现svg图片转换为png和gif

import cairosvg import imageio from PIL import Image import io import osdef svg_to_png(svg_path, png_path):try:cairosvg.svg2png(urlsvg_path, write_topng_path)print(f"成功将 {svg_path} 转换为 {png_path}")except Exception as e:print(f"转换为 P…...

前端热门面试题day1

内容回答较粗糙&#xff0c;如有疑问请自行搜索资料 什么是vue中的slot&#xff1f;它有什么作用 Vue中的Slot&#xff08;插槽&#xff09;就像给组件预先留的“内容停车位”&#xff0c;让父组件能把自定义内容“塞”到子组件的指定位置。它的主要作用是&#xff1a; 灵活定…...

DCAN,ECAN和MCAN的区别

DCAN、ECAN和MCAN的主要区别在于它们各自的管理范围和功能。‌ ‌DCAN&#xff08;动力CAN系统&#xff09;‌&#xff1a;DCAN主要负责协调电机控制单元&#xff08;MCU&#xff09;、电池管理系统&#xff08;BMS&#xff09;、直流电压变换器&#xff08;DC/DC&#xff09;和…...

基于Python爬虫的豆瓣电影信息爬取(可以根据选择电影编号得到需要的电影信息)

# 豆瓣电影信息爬虫(展示效果如下图所示:) 这是一个功能强大的豆瓣电影信息爬虫程序,可以获取豆瓣电影 Top 250 的详细信息。 ## 功能特点 - 自动爬取豆瓣电影 Top 250 的所有电影信息 - 支持分页获取,每页 25 部电影,共 10 页 - 获取每部电影的详细信息,包括: - 标题…...

Linux系统学习----概述与目录结构

linux 是一个开源、免费的操作系统&#xff0c;其稳定性、安全性、处理多并发已经得到业界的认可&#xff0c;目前很多企业级的项目 (c/c/php/python/java/go)都会部署到 Linux/unix 系统上。 一、虚拟机系统操作 1.网络连接的三种方式&#xff08;桥接模式、nat模式、主机模…...

软考资料分享

分享一些软考资料 16系统分析师-基础知识精讲夸克网盘分享1701系统分析师夸克网盘分享1804系统架构设计师夸克网盘分享19软考系统架构设计师2024年11月夸克网盘分享2006信息系统项目管理师夸克网盘分享21软考高级信息系统项目夸克网盘分享22系统分析师视频教程真题资料夸克网盘…...

什么是 GLTF/GLB? 3D 内容创建的基本数据格式说明,怎么下载GLB/GLTF格式模型

GLTF 概述 GLTF 是一种 3D 模型格式&#xff0c;广泛用于在 Web 上共享和显示 3D 内容。 它经过优化&#xff0c;可在 WebGL 中轻松加载&#xff0c;使用 WebGL 可以快速高效地渲染 3D 模型。 GLTF 是 Khronos Group 开发的开放标准之一&#xff0c;以 JSON 或二进制格式表示…...

湖南大学-操作系统实验四

HUNAN UNIVERSITY 操作系统实验报告 一、实验题目 实验四 中断、异常和陷阱指令是操作系统的基石&#xff0c;现代操作系统就是由中断驱动的。本实验和实验五的目的在于深刻理解中断的原理和机制&#xff0c;掌握CPU访问中断控制器的方法&#xff0c;掌握Arm体系结构的中断机…...

3.第三章:数据治理的战略价值

文章目录 3.1 数据治理与企业战略3.1.1 数据驱动的决策体系3.1.2 数据资产的价值挖掘3.1.3 风险防控与合规管理 3.2 数据治理的业务价值3.2.1 提升客户体验3.2.2 优化运营效率3.2.3 加速产品创新 3.3 数据治理的技术价值3.3.1 提升数据质量3.3.2 优化数据架构3.3.3 增强系统集成…...

[KVM] KVM挂起状态恢复失败与KVM存储池迁移

背景&#xff1a;发现KVM host上的几台虚拟机挂起了(paused)&#xff0c;但是并没有执行virsh suspend <vm_hostname>&#xff0c;且使用virsh resume <vm_hostname> 无法恢复。原因是这个几个虚拟机归属的存储池所在的磁盘满了。所以想把虚拟机迁移到磁盘空间富余…...

图文结合 - 光伏系统产品设计PRD文档 -(慧哥)慧知开源充电桩平台

光伏系统产品设计PRD文档 ‌版本号‌&#xff1a;1.0 ‌修订日期‌&#xff1a;2023年10月 ‌作者‌&#xff1a; 一、文档概述 1.1 背景与目标 ‌行业背景‌&#xff1a;全球光伏装机量年增长20%&#xff0c;数字化运维需求迫切‌用户痛点‌&#xff1a;现有系统存在数据延…...

linux-相关命令

一、Linux 详细介绍 1. 什么是 Linux&#xff1f; Linux 是一个开源的类 Unix 操作系统&#xff0c;其核心是 Linux 内核。它最早由 Linus Torvalds 在 1991 年发布&#xff0c;后来逐渐发展成各种发行版&#xff08;如 Ubuntu、CentOS、Debian、Arch 等&#xff09;。 2. L…...

Hive中Map和Reduce阶段的分工

在Hive查询执行过程中,Map和Reduce阶段有明确的分工,但实际情况要复杂一些。 基本分工原则 ​​Map阶段​​: 主要职责是读取输入数据并进行初步处理输出键值对形式的数据​​Reduce阶段​​: 接收Map阶段输出的键值对对相同键的值进行聚合/计算输出最终结果实际执行中的复…...

前端笔记-Vue router

学习目标 Vue Router路由管理1、路由配置2、嵌套路由3、路由守卫与权限控制 一、路由配置&#xff08;给网站做地图&#xff09; npm i vue-router ​作用​&#xff1a;告诉浏览器什么地址该显示什么页面 ​核心代码​&#xff1a; // 创建路由并暴露出去// 第一步&#x…...

MySQL的日志--Redo Log【学习笔记】

MySQL的日志--Redo Log 知识来源&#xff1a; 《MySQL是怎样运行的》--- 小孩子4919 MySQL的事务四大特性之一就是持久性&#xff08;Durability&#xff09;。但是底层是如何实现的呢&#xff1f;这就需要我们的Redo Log&#xff08;重做日志&#xff09;闪亮登场了。它记录着…...

《系统分析师-第三阶段—总结(五)》

背景 采用三遍读书法进行阅读&#xff0c;此阶段是第三遍。 过程 第9章 总结 在这个过程中&#xff0c;对导图的规范越来越清楚&#xff0c;开始结构化&#xff0c;找关系&#xff0c;找联系。...

【LangChain4j】AI 第二弹:项目中接入 LangChain4j

普通接入方式 参考文档&#xff1a; Get Started https://docs.langchain4j.dev/get-started 1.添加依赖 <!-- 基于open-ai的langchain4j接口&#xff1a;ChatGPT、deepseek都是open-ai标准下的大模型 --> <dependency><groupId>dev.langchain4j</grou…...

测试基础笔记第十天

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、查询语句1.基本查询2.条件查询3.模糊查询4.范围查询5.判断空 二、其他复杂查询1.排序2.聚合函数3.分组4.分页查询 一、查询语句 1.基本查询 – 需求1: 准备商…...