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

【Spring Boot】JdbcTemplate数据连接模板 — JdbcTemplate入门

JdbcTemplate入门

本节从基础的部分开始介绍什么是JDBC、什么是JdbcTemplate,然后介绍Spring Boot项目如何使用JdbcTemplate操作数据库。

1.JdbcTemplate简介

1.1 什么是JDBC

JDBC(Java Data Base Connectivity,Java数据库连接)是Java语言中用来规范应用程序如何访问数据库的API,为多种关系数据库提供统一访问方式,诸如查询和更新数据库中数据的方法。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

1.2 什么是JdbcTemplate

JDBC作为Java访问数据库的API规范,统一了各种数据库的访问方式,但是直接在Java程序中使用JDBC还是非常复杂和烦琐的,所以Spring对JDBC进行了更深层次的封装,而JdbcTemplate就是Spring提供的操作数据库的便捷工具。它主要实现数据库连接的管理,我们可以借助JdbcTemplate来执行所有数据库操作,例如查询、插入、更新、删除等操作,并且有效地避免了直接使用JDBC带来的烦琐编码。

Spring Boot作为Spring的集大成者,自然会将JdbcTemplate集成进去。Spring Boot针对JDBC的使用提供了对应的Starter:spring-boot-starter-jdbc,它其实就是在Spring JDBC上做进一步的封装,方便在Spring Boot项目中更好地使用JDBC。

1.3 JdbcTemplate的特点

速度快,相对于ORM框架,JDBC的方式是最快的。

配置简单,Spring封装的除了数据库连接之外,几乎没有额外的配置。

使用方便,它更像DBUtils工具类,只需注入JdbcTemplate对象即可。

1.4 JdbcTemplate的几种类型的方法

JdbcTemplate虽然简单,但是功能非常强大,它提供了非常丰富、实用的方法,归纳起来主要有以下几种类型的方法:

1)execute()方法:可以用于执行任何SQL语句,一般用于执行DDL语句。

2)update()、batchUpdate()方法:用于执行新增、修改与删除等语句。

3)query()和queryForXXX()方法:用于执行查询相关的语句。

4)call()方法:用于执行数据库存储过程和函数相关的语句。

总的来说,新增、删除与修改3种类型的操作主要使用update()和batchUpdate()方法来完成。query()和queryForObject()方法主要用来完成查询功能。execute()方法可以用来创建、修改、删除数据库表。call()方法则用来调用存储过程。

在大部分情况下,我们都会使用更加强大的持久化框架来访问数据库,比如MyBatis、Hibernate或者Spring Data JPA。之所以介绍JdbcTemplate这种基础的数据库框架,只是希望读者能从基础开始学习,只有掌握了这些基础的框架才能更好地学习其他复杂的。

2.Spring Boot集成JdbcTemplate

Spring Boot集成JDBC很简单,只需要引入依赖并进行基础配置即可。接下来以一个具体的例子来学习如何利用Spring的JdbcTemplate进行数据库操作。

步骤01 添加依赖配置。

在pom.xml配置文件中增加JDBC等相关依赖:

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

在上面的示例中,在pom.xml文件中引入spring-boot-starterjdbc依赖。同时,由于项目中使用MySQL作为数据库,因此项目中需要引入MySQL驱动包。spring-boot-starter-jdbc直接依赖于HikariCP和spring-jdbc。

  • HikariCP是Spring Boot 2.0默认使用的数据库连接池,也是传说中最快的数据库连接池。
  • spring-jdbc是Spring框架对JDBC的简单封装,提供了一个简化JDBC操作的开发工具包。

步骤02 创建数据库及表结构。

首先创建jdbctest测试数据库,然后创建student表,包括id、name、sex、age等字段,对应的SQL脚本如下:

DROP TABLE IF EXISTS 'student';
CREATE TABLE 'student' ('id' bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id','name' varchar(32) DEFAULT NULL COMMENT '姓名','sex' int DEFAULT NULL,'age' int DEFAULT NULL,PRIMARY KEY ('id')
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;;

步骤03 配置数据源。

在application.properties中配置MySQL数据库连接相关内容。具体配置如下:

spring.datasource.url=jdbc:mysql://Localhost:3306/jdbctest?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

在上面的示例中,数据库连接配置非常简单,包括数据库连接地址、用户名、密码以及数据驱动,无须其他额外配置。在Spring Boot 2.0中,com.mysql.jdbc.Driver已经过期,推荐使用com.mysql.cj.jdbc.Driver。

步骤04 使用JdbcTemplate。

上面已经把JdbcTemplate集成到Spring Boot项目中,并创建了数据。接下来创建一个单元测试类JdbcTests,验证JdbcTemplate操作数据库。示例代码如下:

@RunWith(SpringRunner.class)@SpringBootTestclass JdbcTests {@AutowiredJdbcTemplate jdbcTemplate;@Testvoid querytest() throws SOLException {List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from student");System.out.println(list.size());Assert.assertNotNull(list);Assert.assertEquals(1,list.size());}
}

上面是简单地使用JdbcTemplate的测试示例,Spring的JdbcTemplate是自动配置的。使用@Autowired将JdbcTemplate注入需要的Bean中即可直接调用。

运行成功,JdbcTemplate已经连接上数据库,并成功执行了数据查询操作。以上就把JdbcTemplate集成到Spring Boot项目中了。

相关文章:

【Spring Boot】JdbcTemplate数据连接模板 — JdbcTemplate入门

JdbcTemplate入门 本节从基础的部分开始介绍什么是JDBC、什么是JdbcTemplate&#xff0c;然后介绍Spring Boot项目如何使用JdbcTemplate操作数据库。 1.JdbcTemplate简介 1.1 什么是JDBC JDBC&#xff08;Java Data Base Connectivity&#xff0c;Java数据库连接&#xff0…...

视频汇聚集中存储EasyCVR平台调用iframe地址视频无法播放,该如何解决?

安防监控视频汇聚平台EasyCVR基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;可提供视频监控直播、云端录像、视频云存储、视频集中存储、视频存储磁盘阵列、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、AI算法中台智能分析无缝…...

从今天起,重新出发

2017年的时候&#xff0c;我还是一名在校大学生&#xff0c;当时为了准备实习面试写下了第一篇学习笔记。 2018年我开始工作&#xff0c;简单记录了使用 Airflow 的踩坑记录。 一直到今天我已经是一个工作了五年的社畜&#xff0c;但是很遗憾没有把工作中的成长记录下来。 当…...

Java多态详解(1)

多态 多态的概念 所谓多态&#xff0c;通俗地讲&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 比如&#xff1a; 这一时间爆火的“现代纪录片”中&#xff0c;麦克阿瑟总是对各种“名人”有不同的评价&…...

optee读取Arm系统寄存器的模板

先写一个通用的内联函数模板,然后再通过宏控来定义各种读写函数。 (core/arch/arm/include/arm64.h)/** Templates for register read/write functions based on mrs/msr*/#define DEFINE_REG_READ_FUNC_(reg, type, asmreg) \ sta...

VSCode 使用总结

快捷键 在 Visual Studio Code (VSCode) 中&#xff0c;有许多常用的快捷键可以提高编程效率。以下是一些常见的 VSCode 编程项目快捷键&#xff1a; 编辑器操作&#xff1a; 撤销&#xff1a;Ctrl Z重做&#xff1a;Ctrl Shift Z复制&#xff1a;Ctrl C剪切&#xff1a;C…...

GuLi商城-前端基础Vue-使用Vue脚手架进行模块化开发

自己亲自实践&#xff1a; mac安装webpack webpack 简介Webpack 是一个非常流行的前端构建工具&#xff0c;它可以将多个模块&#xff08;包括CSS、JavaScript、图片等&#xff09;打包成一个或多个静态资源文件&#xff08;bundle&#xff09;&#xff0c;以便用于部署到生产…...

LeetCode450. 删除二叉搜索树中的节点

450. 删除二叉搜索树中的节点 文章目录 [450. 删除二叉搜索树中的节点](https://leetcode.cn/problems/delete-node-in-a-bst/)一、题目二、题解方法一&#xff1a;递归&#xff08;一种麻烦的方法&#xff09;方法二&#xff1a;优化后的递归 一、题目 给定一个二叉搜索树的根…...

Java动态调试技术原理及实践

文章目录 Java动态调试技术原理及实践引言故事场景一:开发调试动态调试技术简介Java Instrumentation简介动态调试技术实践案例分析场景二:线上问题排查动态调试技术实践案例分析总结Java动态调试技术原理及实践 引言 在日常的软件开发过程中,调试是一个非常重要的环节。当…...

Lua + Redis 实战代码

--[[luarocks install luasocket module socket not foundhttps://github.com/nrk/redis-lua最历害的是&#xff0c;用redis 去跑lua&#xff0c;分布式锁&#xff0c;限流&#xff0c;]]--local redis require("redis");local config{host"127.0.0.1&…...

类的访问限定符,实例化,对象存储方式,this指针

目录 类的定义 类的两种定义方式&#xff1a; 访问限定符 类的实例化 类对象的存储方式 this指针 C语言结构体中只能定义变量&#xff0c;在C中&#xff0c;结构体内不仅可以定义变量&#xff0c;也可以定义函数。比如&#xff1a; 之前在数据结构初阶中&#xff0c;用C语…...

《Linux从练气到飞升》No.15 Linux 环境变量

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…...

Spring Boot 重启命令

Spring Boot 重启命令 本文描述了一个重启Spring Boot命令执行过程和示例 本文利用kill -9 关闭进程&#xff0c;不优雅&#xff0c;会突然中断程序&#xff0c;可能导致数据和逻辑异常 搜索微信小程序【亚特技术】在资源中搜索【优雅】可得到Spring Boot如何优化重启 1. 过…...

pdf怎么合并在一起?这几个合并方法了解一下

pdf怎么合并在一起&#xff1f;在日常工作、学习和生活中&#xff0c;我们常常会遇到需要将多个PDF文件合并成一个文件的情况。比如&#xff0c;在学术论文写作中&#xff0c;我们可能需要将多篇论文合并成一个文件进行打印和提交。在工作中&#xff0c;我们可能需要将多个报告…...

【仿写tomcat】七、项目结构优化以及代码开源

仿写tomcat 项目结构开源地址 项目结构 到目前为止&#xff0c;博主的仿写tomcat就告一段落了&#xff0c;后续有时间了还会继续补充功能&#xff0c;现在的项目结构如下。 在保证功能的前提下作出的改动有&#xff1a; 将各个类中的参数统一成了Config类&#xff0c;通过对…...

泛微E8配置自定义触发流程失败

在新公司接了个配置泛微流程触发的活。因为泛微的官方文档并没有详细的操作指引&#xff0c;在测试环境配置之后、要触发的流程可以手工提交&#xff0c;但是触发一直不成功。简单记录下业务场景和其他处理信息&#xff0c;以供参考。 应用版本 目前使用了泛微 E8 &#xff0…...

Springboot整合Mybatis调用Oracle存储过程

1、配置说明 Oracel11g+springboot2.7.14+mybatis3.5.13 目标:springboot整合mybatis访问oracle中的存储过程,存储过程返回游标信息。 mybatis调用oracle中的存储过程方式 2、工程结构 3、具体实现 3.1、在Oracle中创建测试数据库表 具体数据可自行添加 create table s…...

【java安全】Log4j反序列化漏洞

文章目录 【java安全】Log4j反序列化漏洞关于Apache Log4j漏洞成因CVE-2017-5645漏洞版本复现环境漏洞复现漏洞分析 CVE-2019-17571漏洞版本漏洞复现漏洞分析 参考 【java安全】Log4j反序列化漏洞 关于Apache Log4j Log4j是Apache的开源项目&#xff0c;可以实现对System.out…...

[mars3d 打包]vue3+vite,打包后mars3d找不到

前提 &#xff1a; vue3vite开发框架&#xff1b;使用 官网 方式3获取sdk,引入mars3d; 问题&#xff1a;开发时一切正常&#xff0c;打包之后&#xff0c;页面白屏&#xff0c;没有渲染&#xff1b; 相关的mars3d的相关方法会报错&#xff1b;但是mars3d的打印日志是有的&…...

STM32——SPI外设总线

SPI外设简介 STM32内部集成了硬件SPI收发电路&#xff0c;可以由硬件自动执行时钟生成、数据收发等功能&#xff0c;减轻CPU的负担 可配置8位/16位数据帧、高位先行/低位先行 时钟频率&#xff1a; fPCLK / (2, 4, 8, 16, 32, 64, 128, 256) 支持多主机模型、主或从操作 可…...

Hunyuan-MT-7B保姆级教程:Pixel Language Portal在树莓派5上的轻量级翻译终端部署

Hunyuan-MT-7B保姆级教程&#xff1a;Pixel Language Portal在树莓派5上的轻量级翻译终端部署 1. 项目介绍与核心价值 Pixel Language Portal&#xff08;像素语言跨维传送门&#xff09;是一款基于Tencent Hunyuan-MT-7B大语言模型的创新翻译工具。与传统翻译软件不同&#…...

Windows 10/11下用StyleGAN2-ADA-PyTorch训练自己的数据集(避坑Visual Studio编译错误)

Windows平台StyleGAN2-ADA-PyTorch环境配置全指南&#xff1a;从编译错误到自动化训练 在Windows 10/11上配置StyleGAN2-ADA-PyTorch环境时&#xff0c;许多开发者都会遇到Visual Studio编译工具链缺失的经典问题。不同于Linux系统的开箱即用&#xff0c;Windows环境需要额外处…...

如何3分钟制作专业证件照?HivisionIDPhotos免费AI工具全攻略

如何3分钟制作专业证件照&#xff1f;HivisionIDPhotos免费AI工具全攻略 【免费下载链接】HivisionIDPhotos ⚡️HivisionIDPhotos: a lightweight and efficient AI ID photos tools. 一个轻量级的AI证件照制作算法。 项目地址: https://gitcode.com/GitHub_Trending/hiv/Hi…...

拓扑排序别再死记硬背了!用邻接矩阵手搓一个(附C++/C语言单文件实现)

拓扑排序的工程化实现&#xff1a;从邻接矩阵到零依赖代码实战 第一次接触拓扑排序时&#xff0c;我盯着教科书上的算法描述看了半天——"选择一个入度为0的顶点并输出"、"从图中删除该顶点和所有以它为起点的有向边"——这些抽象的描述让我困惑不已。直到…...

探秘书匠策AI:毕业论文创作的“全能助手”大揭秘

在学术探索的征途中&#xff0c;毕业论文如同一座巍峨的山峰&#xff0c;让无数学生既心怀憧憬又倍感压力。从选题迷茫到文献海捞&#xff0c;从结构搭建到内容雕琢&#xff0c;每一步都充满了挑战。但别怕&#xff0c;今天我们就来揭秘一位学术界的“全能助手”——书匠策AI&a…...

QuickSnap:Blender三维建模效率革命,快速对齐插件让精准建模变得简单

QuickSnap&#xff1a;Blender三维建模效率革命&#xff0c;快速对齐插件让精准建模变得简单 【免费下载链接】quicksnap Blender addon to quickly snap objects/vertices/points to object origins/vertices/points 项目地址: https://gitcode.com/gh_mirrors/qu/quicksnap…...

从零开始!DeepSeek-R1-Distill-Qwen-1.5B完整部署流程详解

从零开始&#xff01;DeepSeek-R1-Distill-Qwen-1.5B完整部署流程详解 1. 模型简介与核心优势 1.1 什么是DeepSeek-R1-Distill-Qwen-1.5B&#xff1f; DeepSeek-R1-Distill-Qwen-1.5B是一款经过知识蒸馏优化的轻量级语言模型&#xff0c;由DeepSeek团队基于Qwen-1.5B架构开发…...

从零到一:深度解析BertTokenizer.from_pretrained的加载机制与实战技巧

1. 初识BertTokenizer.from_pretrained&#xff1a;你的NLP敲门砖 第一次接触Hugging Face的Transformers库时&#xff0c;我被BertTokenizer.from_pretrained()这个方法深深吸引了。它就像是一把万能钥匙&#xff0c;能快速打开各种预训练语言模型的大门。记得当时我尝试用传统…...

FPGA密码锁设计避坑指南:状态机划分、时序约束与安全逻辑的那些事儿

FPGA密码锁设计避坑指南&#xff1a;状态机划分、时序约束与安全逻辑的那些事儿 在FPGA开发领域&#xff0c;密码锁设计看似简单&#xff0c;实则暗藏玄机。许多工程师在完成基础功能后&#xff0c;往往会在状态机划分、时序约束和安全逻辑等环节踩坑。本文将结合实战经验&…...

TTI-Chicago等机构突破性研究:AI学会了一笔一划创作矢量草图

这项由芝加哥丰田技术研究院&#xff08;TTI-Chicago&#xff09;、芝加哥大学和麻省理工学院联合开展的研究发表于2026年&#xff0c;论文编号为arXiv:2603.19500v1。有兴趣深入了解技术细节的读者可以通过该编号查询完整论文。当我们看到一位画家创作时&#xff0c;他们通常不…...