【Spring 篇】JdbcTemplate:轻松驾驭数据库的魔法工具
欢迎来到数据库的奇妙世界,在这里,我们将一同揭开Spring框架中JdbcTemplate的神秘面纱。JdbcTemplate是Spring提供的一个简化数据库操作的工具,它为我们提供了一种轻松驾驭数据库的魔法。本篇博客将详细解释JdbcTemplate的基本使用,适合刚刚接触Spring的小白们,让你轻松驾驭数据库的魔法世界。
JdbcTemplate的魅力
在现代应用程序中,数据库是存储和检索数据的重要组成部分。然而,直接使用传统的JDBC(Java Database Connectivity)进行数据库操作会显得繁琐冗长,这时候JdbcTemplate就是一种救赎。JdbcTemplate是Spring框架对JDBC的封装,提供了更简单、更高效的数据库操作方式。
JdbcTemplate的基本用法
让我们从头开始,一步步探讨JdbcTemplate的基本用法。在Spring中使用JdbcTemplate需要先配置数据源(DataSource),这通常在Spring的配置文件中完成。以下是一个简单的配置示例:
<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
。你需要根据你的数据库信息修改url
、username
和password
属性。
查询操作
查询单个值
使用JdbcTemplate执行查询操作是非常简单的。首先,我们来看如何查询单个值,比如统计表中的记录数。以下是一个查询总记录数的例子:
public class UserDao {private JdbcTemplate jdbcTemplate;// setter method for jdbcTemplatepublic int getTotalUsers() {String sql = "SELECT COUNT(*) FROM users";return jdbcTemplate.queryForObject(sql, Integer.class);}
}
在这个例子中,我们使用queryForObject
方法执行SQL查询,指定了SQL语句和返回类型。Integer.class
表示我们期望返回一个整数。
查询单行记录
如果我们想查询一行记录,可以使用RowMapper
接口。以下是一个查询用户信息的例子:
public class UserDao {private JdbcTemplate jdbcTemplate;// setter method for jdbcTemplatepublic User getUserById(int userId) {String sql = "SELECT * FROM users WHERE id = ?";return jdbcTemplate.queryForObject(sql, new Object[]{userId}, new UserRowMapper());}private static class UserRowMapper implements RowMapper<User> {@Overridepublic User mapRow(ResultSet resultSet, int rowNum) throws SQLException {User user = new User();user.setId(resultSet.getInt("id"));user.setUsername(resultSet.getString("username"));user.setEmail(resultSet.getString("email"));return user;}}
}
在这个例子中,我们定义了一个UserRowMapper
类实现了RowMapper<User>
接口,用于映射查询结果到User
对象。在getUserById
方法中,我们使用queryForObject
方法执行SQL查询,并传递了UserRowMapper
作为映射器。
查询多行记录
如果我们想查询多行记录,可以使用query
方法。以下是一个查询所有用户的例子:
public class UserDao {private JdbcTemplate jdbcTemplate;// setter method for jdbcTemplatepublic List<User> getAllUsers() {String sql = "SELECT * FROM users";return jdbcTemplate.query(sql, new UserRowMapper());}
}
在这个例子中,我们直接调用query
方法,传递了SQL语句和UserRowMapper
映射器。
更新操作
除了查询,JdbcTemplate还提供了便捷的更新操作。以下是一个更新用户信息的例子:
public class UserDao {private JdbcTemplate jdbcTemplate;// setter method for jdbcTemplatepublic void updateUser(User user) {String sql = "UPDATE users SET username = ?, email = ? WHERE id = ?";jdbcTemplate.update(sql, user.getUsername(), user.getEmail(), user.getId());}
}
在这个例子中,我们使用update
方法执行SQL更新操作,传递了SQL语句和更新所需的参数。update
方法可以用于执行任何更新操作,包括插入、更新和删除。
插入操作
接下来,我们看一下如何使用JdbcTemplate执行插入操作。以下是一个插入新用户的例子:
public class UserDao {private JdbcTemplate jdbcTemplate;// setter method for jdbcTemplatepublic void addUser(User user) {String sql = "INSERT INTO users (username, email) VALUES (?, ?)";jdbcTemplate.update(sql, user.getUsername(), user.getEmail());}
}
在这个例子中,我们同样使用update
方法执行SQL插入操作,传递了SQL语句和插入所需的参数。
删除操作
最后,让我们看一下如何使用JdbcTemplate执行删除操作。以下是一个删除用户的例子:
public class UserDao {private JdbcTemplate jdbcTemplate;// setter method for jdbcTemplatepublic void deleteUser(int userId) {String sql = "DELETE FROM users WHERE id = ?";jdbcTemplate.update(sql, userId);}
}
同样,我们使用update
方法执行SQL删除操作,传递了SQL语句和删除所需的参数。
JdbcTemplate的事务管理
在实际应用中,事务管理是数据库操作不可或缺的一部分。Spring的JdbcTemplate也提供了对事务的支持,让我们来看一下如何使用JdbcTemplate进行事务管理。
首先,我们需要配置事务管理器。以下是一个使用DataSourceTransactionManager
的例子:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/>
</bean>
在这个例子中,我们配置了一个DataSourceTransactionManager
并将数据源dataSource
注入其中。
然后,在使用JdbcTemplate的类中,我们需要注入事务管理器并使用@Transactional
注解标记需要进行事务管理的方法。以下是一个使用事务的例子:
import org.springframework.transaction.annotation.Transactional;public class UserService {private JdbcTemplate jdbcTemplate;// setter method for jdbcTemplate@Transactionalpublic void transferMoney(int fromUserId, int toUserId, double amount) {// 执行转账操作// ...}
}
在这个例子中,我们使用了@Transactional
注解标记transferMoney
方法,表明该方法需要进行事务管理。当这个方法被调用时,如果发生异常,事务将回滚,否则事务将提交。
JdbcTemplate的异常处理
在实际开发中,对于数据库操作,异常处理是非常重要的一部分。JdbcTemplate为我们提供了DataAccessException
异常体系,用于捕获和处理数据库操作可能抛出的异常。
以下是一个简单的异常处理的例子:
public class UserDao {private JdbcTemplate jdbcTemplate;// setter method for jdbcTemplatepublic void addUser(User user) {try {String sql = "INSERT INTO users (username, email) VALUES (?, ?)";jdbcTemplate.update(sql, user.getUsername(), user.getEmail());} catch (DataAccessException e) {// 处理数据库操作异常System.out.println("Error occurred while adding user: " + e.getMessage());}}
}
在这个例子中,我们使用了try-catch
块捕获可能发生的DataAccessException
,并在捕获到异常时进行处理。
JdbcTemplate的批处理操作
有时候我们需要执行批处理操作,JdbcTemplate也为我们提供了支持。以下是一个批处理插入的例子:
public class UserDao {private JdbcTemplate jdbcTemplate;// setter method for jdbcTemplatepublic void addUsers(List<User> users) {String sql = "INSERT INTO users (username, email) VALUES (?, ?)";jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {@Overridepublic void setValues(PreparedStatement preparedStatement, int i) throws SQLException {User user = users.get(i);preparedStatement.setString(1, user.getUsername());preparedStatement.setString(2, user.getEmail());}@Overridepublic int getBatchSize() {return users.size();}});}
}
在这个例子中,我们使用了batchUpdate
方法执行批处理插入操作。通过实现BatchPreparedStatementSetter
接口,我们可以设置每个批处理操作的参数,并通过getBatchSize
方法指定批处理的大小。
JdbcTemplate的封装
为了使数据库操作更加便捷,我们通常会将JdbcTemplate进行封装。以下是一个简单的封装示例:
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 {private final JdbcTemplate jdbcTemplate;@Autowiredpublic UserDao(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public int getTotalUsers() {String sql = "SELECT COUNT(*) FROM users";return jdbcTemplate.queryForObject(sql, Integer.class);}// 其他数据库操作方法...
}
在这个例子中,我们使用了@Repository
注解将UserDao
标记为一个持久层组件,同时通过构造函数注入了JdbcTemplate
。这样,我们在UserDao
中就可以直接使用jdbcTemplate
进行数据库操作。
结语
JdbcTemplate是Spring框架中用于简化数据库操作的神奇工具,它为我们提供了一种轻松驾驭数据库的方式。通过本文的详细讲解,相信你已经对JdbcTemplate的基本使用有了清晰的了解。在数据库的奇妙世界中,JdbcTemplate为我们提供了强大的魔法,让我们能够轻松地进行各种数据库操作。
在你的编程旅程中,愿JdbcTemplate的魔法助你驾驭数据库的风云,轻松应对各种数据操作挑战。让我们一同在代码的世界中畅游,用JdbcTemplate为数据库的奇妙之旅添上灿烂的一笔吧!
作者信息 作者 : 繁依Fanyi CSDN: https://techfanyi.blog.csdn.net 掘金:https://juejin.cn/user/4154386571867191 |
相关文章:
【Spring 篇】JdbcTemplate:轻松驾驭数据库的魔法工具
欢迎来到数据库的奇妙世界,在这里,我们将一同揭开Spring框架中JdbcTemplate的神秘面纱。JdbcTemplate是Spring提供的一个简化数据库操作的工具,它为我们提供了一种轻松驾驭数据库的魔法。本篇博客将详细解释JdbcTemplate的基本使用࿰…...
Web开发SpringBoot SpringMVC Spring的学习笔记(包含开发常用工具类)
开发框架学习笔记 一.Spring SpringMVC SpringBoot三者的联系SpringMVC工作原理 二.SpringBoot的学习2.1 注解2.1.1 SpringBoot的核心注解2.1.2 配置导入注解(简化Spring配置写XML的痛苦)Configuration和Bean(人为注册Spring 的 Bean)Import(补)ImportResource(补)AutowiredQua…...
微服务下的SpringSecurity认证端
从三板斧开始微服务下的SpringSecurity开始 一、引入组件包 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-oauth2</artifactId> </dependency> 二、创建适配器 AuthorizationServerConfig…...
苹果电脑菜单栏应用管理软件Bartender 4 mac软件特点
Bartender mac是一款可以帮助用户更好地管理和组织菜单栏图标的 macOS 软件。它允许用户隐藏和重新排列菜单栏图标,从而减少混乱和杂乱。 Bartender mac软件特点 菜单栏图标隐藏:Bartender 允许用户隐藏菜单栏图标,只在需要时显示。这样可以…...
笙默考试管理系统-MyExamTest----codemirror(65)
笙默考试管理系统-MyExamTest----codemirror(65) 目录 一、 笙默考试管理系统-MyExamTest----codemirror 二、 笙默考试管理系统-MyExamTest----codemirror 三、 笙默考试管理系统-MyExamTest----codemirror 四、 笙默考试管理系统-MyExamTest---…...
git在本地创建dev分支并和远程的dev分支关联起来
文章目录 git在本地创建dev分支并和远程的dev分支关联起来1. 使用git命令2. 使用idea2.1 先删除上面建的本地分支dev2.2 通过idea建dev分支并和远程dev分支关联 3. 查看本地分支和远程分支的关系 git在本地创建dev分支并和远程的dev分支关联起来 1. 使用git命令 git checkout…...
【C++】深入了解构造函数之初始化列表
目录 一、再谈构造函数 1、引入 1)构造函数体赋值 2)不同成员变量赋值 2、初始化列表 一、再谈构造函数 1、引入 1)构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值…...
差分--差分数组快速计算L到R值相加后的数组
目录 差分:思路代码: 原题链接 差分: 输入一个长度为 n 的整数序列。 接下来输入 m 个操作,每个操作包含三个整数 l,r,c ,表示将序列中 [l,r] 之间的每个数加上 c 。 请你输出进行完所有操作后的序列。 输入格式 第…...
《NLP入门到精通》栏目导读(01/2)
一、说明 栏目《NLP入门到精通》本着从简到难得台阶式学习过度。将自然语言处理得知识贯穿过来。本栏目得前导栏目是《深度学习》、《pytorch实践》,因此,读者需要一定得深度学习基础,才能过度到此栏目内容。 二、博客建设理念 本博客基地,将建成人工智能领域的参考资料库;…...
three.js实现电子围栏效果(纹理贴图)
three.js实现电子围栏效果(纹理贴图) 实现步骤 围栏的坐标坐标转换为几何体顶点,uv顶点坐标加载贴图,移动 图例 代码 <template><div class"app"><div ref"canvesRef" class"canvas-…...
DHSP和DNS
一、服务程序 1.1DHCP定义 DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下,DHCP作为Windows Server的一个服务组…...
Python冒号的解释
1. “没什么首次没有为第二个,跳了三个”。它得到的切片序列的每一个第三个项目。 扩展片是你想要的。新在Python 2.3 2. Python的序列切片地址可以写成[开始:结束:一步]和任何启动,停止或结束可以被丢弃。a[::3]是每第三个序列。…...
uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -后端鉴权拦截器实现
锋哥原创的uniapp微信小程序投票系统实战: uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…...
固乔快递查询助手:批量、快速、全面的快递信息查询软件
在快递行业飞速发展的今天,如何高效、准确地掌握快递信息成为了很多人的需求。而固乔快递查询助手正是解决这一难题的利器。 固乔快递查询助手是一款专注于快递信息查询的软件,支持多家主流快递公司查询。用户只需输入单号,即可快速查询到实时…...
C#,归并排序算法(Merge Sort Algorithm)的源代码及数据可视化
归并排序 归并算法采用非常经典的分治策略,每次把序列分成n/2的长度,将问题分解成小问题,由复杂变简单。 因为使用了递归算法,不能用于大数据的排序。 核心代码: using System; using System.Text; using System.Co…...
Linux的网络服务DHCP
一.了解DHCP服务 1.1 DHCP定义 DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下,DHCP作为Windows Server的一个服…...
【小沐学CAD】开源Assimp库导入三维模型(C++、Python)
文章目录 1、简介2、下载编译3、代码测试3.1 C3.2 pyassimp(Python) 结语 1、简介 https://github.com/assimp/assimp Open Asset Import Library 是一个库,用于将各种 3D 文件格式加载为共享的内存格式。它支持 40 多种用于导入的文件格式和…...
RT-Thread:SPI万能驱动 SFUD 驱动Flash W25Q64,通过 STM32CubeMX 配置 STM32 SPI 驱动
关键词:SFUD,FLASH,W25Q64,W25Q128,STM32F407 说明:RT-Thread 系统 使用 SPI万能驱动 SFUD 驱动 Flash W25Q64,通过 STM32CubeMX 配置 STM32 SPI 驱动。 提示:SFUD添加后的存储位置 1.打开RT-Thread Sett…...
Python学习笔记-使用Anaconda+VSCode配置开发环境
文章目录 概述一、安装Anaconda1.1 下载软件1.2 安装anaconda1.3 配置环境 二、配置虚拟环境2.1 使用conda创建一个新的虚拟环境2.1.1 使用search指令查看支持的python的版本:2.1.2 使用create创建指定版本的虚拟环境:2.1.3 使用env list查看虚拟环境列表…...
RabbitMQ的关键概念解析
RabbitMQ 是一个广泛使用的开源消息代理,它允许应用程序通过复杂的路由和存储机制来交换数据。理解 RabbitMQ 的核心概念对于有效地使用它至关重要。以下是 RabbitMQ 的一些关键概念及其工作流程: 关键概念 生产者(Producer) 生产…...
Python快速排序
快速排序是一种常用的排序算法,它通过递归地将数组分割成较小的子数组,然后对这些子数组进行排序,最终将它们合并成一个有序的数组。具体步骤如下: 1. 选择一个基准元素,通常是数组中的第一个元素。 2. 将数组分成两部…...
SpringBoot整合人大金仓数据库KingBase
1 去KingBase官网下载驱动jar包 2 将解压得到的所有jar包放置在libs目录下(没有就新建一个目录) 3 在pom文件添加相关依赖 <!--添加KingBase所需要的依赖--> <dependency><groupId>com.kingbase</groupId><artifactId>kin…...
Phoenix基本使用
1、Phoenix简介 1.1 Phoenix定义 Phoenix是HBase的开源SQL皮肤。可以使用标准JDBC API代替HBase客户端API来创建表,插入数据和查询HBase数据。 1.2 Phoenix特点 容易集成:如Spark,Hive,Pig,Flume和Map Reduce。性能…...
31-35.玩转Linux操作系统
玩转Linux操作系统 说明:本文中对Linux命令的讲解都是基于名为CentOS的Linux发行版本,我自己使用的是阿里云服务器,系统版本为CentOS Linux release 7.6.1810。不同的Linux发行版本在Shell命令和工具程序上会有一些差别,但是这些差…...
windows下载官方正版notepad++
一、前言 notepad是一款非常好用的编辑器,简洁、快速、高效。可是很多时候我们想去官网下载时,百度出来的都是一堆第三方下载地址,捆绑流氓软件,要么就是付费,作为一款优秀开源软件,我们必须要知道正确的下…...
Jmeter+ant+jenkins持续集成
一、环境准备 1、 jdk环境 要求JDK1.8以上,命令行输入:java -version,出现如下提示说明安装成功。 2、 Jmeter环境 下载Jmeter最新版本,解压即可,添加bin目录到环境变量。 3、 Ant环境 设置ant环境变量࿰…...
利用邮件发送附件来实现一键巡检,附件是通过调用zabbix api生成的word和Excel
HTML部分: <!DOCTYPE html> <html> <head><title>自动巡检</title><!-- 加入CSS样式 --> </head> <body><form id"inspectionForm"><label for"email">邮箱地址:</label>&…...
Linux 常用指令汇总
Linux 常用指令汇总 文章目录 Linux 常用指令汇总[toc]前言一、文件目录指令pwd 指令ls 指令cd 指令mkdir 指令rmdir 指令tree 指令cp 指令rm 指令mv 指令cat 指令more 指令less 指令head 指令tail 指令echo 指令> 指令>> 指令 二、时间日期指令date 指令cal 指令 三、…...
SpringBoot 注解超全详解(整合超详细版本)
使用注解的优势: 采用纯java代码,不在需要配置繁杂的xml文件 在配置中也可享受面向对象带来的好处 类型安全对重构可以提供良好的支持 减少复杂配置文件的同时亦能享受到springIoC容器提供的功能 1注解详解(配备了完善的释义)…...
Redis:原理速成+项目实战——Redis实战9(秒杀优化)
👨🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:Redis:原理速成项目实战——Redis实战8(基于Redis的分布式锁及优化) 📚订阅专栏&…...
域名怎么制作网站/网站关键词优化案例
Cmake使用总结 Cmake中常见问题:## 标题 ## 1. 下载问题。经常需要从国外下载第三方包,由于网络问题可能会下载失败!建议开启VPN进行下载,或者从其他下载源下载后进行手动解压并放到指定路径下。 2. 路径问题。Cmake中往往需要填写路径&am…...
vue响应式网站开发/营销型网站有哪些平台
0x00前言 今天在知道创宇上发现3月26日提交WordPress XSS和远程代码执行漏洞,于是试着复现了下远程代码执行漏洞 该漏洞源于Social Warfare组件,并且版本<3.5.2、且要是管理员登录状态,因此该漏洞是个后台代码执行 漏洞报告https://www.we…...
商标设计图案/杭州优化公司哪家好
前言 Flutter 作为Google出品的一个新兴的跨平台移动客户端UI开发框架,正在被越来越多的开发者和组织使用,包括阿里的咸鱼、腾讯的微信等。 今天,我主要讲解Flutter中文本组件方面的Widget,包括Text、RichText、TextField&#…...
高唐建筑公司网站/百度网站排名怎么提高
工作需要经常在web目录下上传文件,都是小文件,几k~几十k,专门开一个ftp服务器或者用nfs共享都略显麻烦.偶尔看到一款小工具lrzsz 觉得挺好用.特标注!!!废话少说,开始上图.1/不想看详情的可以用yum -y install lrzsz2/创建一个文件测试下3/设置CRT的上传下载目录4/语法: sz x 下…...
域名备案的网站名称/网站seo视频狼雨seo教程
一、前言 二、Web服务器提供服务的方式 三、多进程、多线程、异步模式的对比 四、Web服务请求过程 五、Linux I/O模型 六、Linux I/O模型具体说明 七、Linux I/O模型的具体实现 八、Apache的工作方式 九、支持高并发的web服务器 十、Nginx详解一、前言线程、进程、以及并发连接…...
帝国cms怎么做网站地图/东莞今天最新消息新闻
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!通过HTTP协议与代理服务器建立连接ÿ…...