47、Spring Boot 详细讲义(四)
六. Spring Boot 与数据库
目录
JDBC 集成
Spring Data JPA
MyBatis 集成
事务管理
1、JDBC 集成
1.1 JDBC简介
1.1.1 定义和作用
JDBC(Java Database Connectivity)是Java中用于与关系型数据库进行交互的API。它为Java程序提供了一个标准的、统一的接口,使得Java程序可以连接到各种支持JDBC的数据库,如MySQL、Oracle、PostgreSQL等。通过JDBC,开发人员可以执行SQL语句,进行数据的增删改查操作。
JDBC的主要作用包括:
- 连接数据库:通过JDBC驱动器建立与数据库的连接。
- 执行SQL语句:支持执行各种SQL语句,如SELECT、INSERT、UPDATE、DELETE等。
- 处理结果集:对于查询操作,JDBC提供了结果集(ResultSet)来存储和处理查询返回的数据。
- 事务管理:支持数据库事务的提交和回滚,确保数据操作的原子性和一致性。
1.1.2 优点和缺点
优点:
- 跨平台性:JDBC允许Java程序在不同平台和数据库之间移植,仅需更换相应的JDBC驱动器。
- 统一接口:提供了统一的接口,简化了与不同数据库的交互。
- 功能强大:支持复杂的SQL操作和事务管理。
- 广泛支持:几乎所有主流数据库都提供JDBC驱动器,具有良好的生态系统。
缺点:
- 冗长的代码:传统的JDBC操作需要手动管理连接、预处理语句、处理结果集等,这会导致代码冗长且易于出错。
- 资源管理麻烦:需要手动关闭连接、语句和结果集,否则会导致资源泄漏。
- 不支持动态SQL:JDBC本身不直接支持动态生成SQL,需要通过字符串拼接等方式实现,可能增加SQL注入的风险。
- 不适合复杂对象关系映射:JDBC适合简单的CRUD操作,但在处理复杂的对象关系映射时,需要额外的ORM(对象关系映射)工具的支持。
1.2 Spring Boot 中的 JDBC 配置
1.2.1 自动配置原理
Spring Boot通过 starters 机制自动配置JDBC环境。当添加spring-boot-starter-jdbc
或spring-boot-starter-data-jpa
依赖时,Spring Boot会自动在classpath中查找JDBC驱动器,并基于这些驱动器配置数据源和JdbcTemplate。
具体来说:
- 自动检测驱动器:Spring Boot会检测classpath中是否存在支持的数据库驱动器,如H2、MySQL、PostgreSQL等。
- 配置数据源:根据
application.properties
中的配置,创建并配置数据源(DataSource)实例,默认使用HikariCP作为连接池。 - 创建JdbcTemplate:Spring Boot会自动创建并配置JdbcTemplate bean,开发者可以直接注入使用。
1.2.2 数据源配置(如HikariCP)
HikariCP是Spring Boot默认使用的数据库连接池,因为它高效、轻量级,并且性能优异。以下是HikariCP的主要特点:
- 高性能:HikariCP是目前Java领域最快的连接池之一。
- 轻量级:占用内存小,启动快。
- 自动调优:HikariCP能够自动调整连接池大小,以达到最佳性能。
在application.properties
中配置HikariCP的相关参数:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # HikariCP 配置
spring.datasource.hikari.minimumIdle=5
spring.datasource.hikari.maximumPoolSize=15
spring.datasource.hikari.connectionTimeout=30000
spring.datasource.hikari.idleTimeout=60000
1.2.3 application.properties 配置详解
在application.properties
中,可以通过Spring Boot的属性来配置数据源和数据库连接:
- 数据库连接URL:
spring.datasource.url
- 数据库用户名:
spring.datasource.username
- 数据库密码:
spring.datasource.password
- JDBC驱动类名:
spring.datasource.driver-class-name
- 数据源类型:
spring.datasource.type
,默认为HikariDataSource,可以选择其他如Druid等。
自定义数据源
如果需要自定义数据源,可以在配置类中定义一个@Bean
:
@Configuration
public class DatabaseConfig { @Bean public DataSource dataSource() { return DataSourceBuilder.create() .driverClassName("com.mysql.cj.jdbc.Driver") .url("jdbc:mysql://localhost:3306/mydb") .username("root") .password("123456") .build(); }
}
1.3 使用 JdbcTemplate
1.3.1 什么是 JdbcTemplate?
JdbcTemplate是Spring框架提供的一个JDBC模板类,旨在简化JDBC操作。它封装了底层的JDBC细节,提供了一系列方法来执行SQL操作,并自动处理资源的释放。通过使用JdbcTemplate,开发者可以专注于业务逻辑,而不必担心繁琐的JDBC资源管理。
1.3.2 CRUD 操作示例
以下是使用JdbcTemplate进行CRUD操作的示例:
- 插入数据(INSERT):
public void insertUser(User user) { String sql = "INSERT INTO users (username, email, password) VALUES (?, ?, ?)"; jdbcTemplate.update(sql, user.getUsername(), user.getEmail(), user.getPassword());
}
- 查询数据(SELECT):
public List<User> findAllUsers() { String sql = "SELECT * FROM users"; return jdbcTemplate.query(sql, new UserRowMapper());
} class UserRowMapper implements RowMapper<User> { @Override public User mapRow(ResultSet rs, int rowNum) throws SQLException { User user = new User(); user.setId(rs.getLong(</
相关文章:
47、Spring Boot 详细讲义(四)
六. Spring Boot 与数据库 目录 JDBC 集成 Spring Data JPA MyBatis 集成 事务管理 1、JDBC 集成 1.1 JDBC简介 1.1.1 定义和作用 JDBC(Java Database Connectivity)是Java中用于与关系型数据库进行交互的API。它为Java程序提供了一个标准的、统一的接口…...
Dify - 整合Ollama + Xinference私有化部署Dify平台(01)
文章目录 总体方案服务器在Ubuntu 20.04上安装Docker更新软件包索引安装一些必要的软件包,以便apt能够通过HTTPS使用仓库:添加Docker的官方GPG密钥设置稳定的仓库再次更新软件包索引从新添加的仓库中安装Docker CE验证Docker是否安装成功(可选…...
【RocketMQ】关于RocketMQ配置好了jdk环境变量却一直报需要配置环境变量的问题
正如上图所示,我明明已经配置好了环境变量,也显示配置好了,jdk与我的rocketmq的版本也是适配的,可每次启动namesrv和broker却一直显示要去配置环境变量,其实很简单,配置环境变量时特殊符号会影响路径查找&a…...
【信息系统项目管理师】高分论文:论信息系统项目的范围管理(投资信息化全流程管理项目)
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 1、规划范围管理2、收集需求3、定义范围4、创建wbs5、确认范围6、控制范围2018年2月,我有幸参加了 XX省自贸区财政投资信息化全流程管理项目的假设,作为项目发起单位,省自贸办经过审时度势,及时响应国家自贸…...
Jmeter创建使用变量——能够递增递减的计数器
Jmeter创建使用变量——能够递增递减的计数器 如下图所示,创建一个 取值需限定为0 2 4这三个值内的变量。 Increment:每次迭代后 递增的值,给计数器增加的值 Maximum value:计数器的最大值,如果超过最大值࿰…...
数据分析不只是跑个SQL!
数据分析不只是跑个SQL! 数据分析五大闭环,你做到哪一步了?闭环一:认识现状闭环二:原因分析闭环三:优化表现闭环四:预测走势闭环五:主动解读数据 数据思维:WHY-WHAT-HOW模…...
批量将文件夹名称、文件夹路径提取到 Excel 清单
在日常工作中,管理大量文件夹和文件路径可能变得十分繁琐。无论是在进行文件整理、备份还是数据分析时,提取文件夹的名称与路径信息,能够帮助你更高效地管理文件。本文将为您提供如何快速提取文件夹名称与路径,并将这些信息整理到…...
Git 基本使用
一、Git简介 简单的内容追踪系统;是一个快速、可扩展的分布式版本控制系统,拥有异常丰富的命令集提供高级操作和对内部的完全访问。 二、Git安装 详情看本人此文章。 三、Git 命令(基础版) 把 Git 分为上层封装命令(…...
LLM - Dify 平台介绍
文章目录 引言官网核心功能架构图典型应用场景在线平台 引言 Dify 是一款开源的 LLM(大语言模型)应用开发平台,旨在帮助开发者快速构建、部署和管理基于大语言模型的智能化应用。 官网 https://dify.ai/zh https://github.com/langgenius/…...
linux编译adbd工具使用
在使用linux时,通常是没有现成的adbd文件使用的,这就需要我们进行文件的编译了,编译可以分为三步进行,在编译前我们需要下载对应的源码使用,我们可以从 https://launchpad.net/android-tools地址处下载需要的android-tools源码使用…...
安全人员如何对漏洞进行定级?
CVSS 标准 CVSS 介绍 CVSS,即通用漏洞评分系统(Common Vulnerability Scoring System),是一个用于评估计算机系统漏洞严重程度的行业标准。 CVSS为安全专业人员、漏洞管理团队和系统管理员提供了一种标准化的方法来评估和比较不…...
【ROS2】行为树 BehaviorTree(四):组合使用子树
1、大树调用子树 如下图,左边为大树主干: 1)如果门没有关,直接通过; 2)如果门关闭了,执行开门动作,然后通过 右边为子树,主要任务是开门 1)尝试直接开门; 2)尝试开锁开门,最多尝试5次; 3)最后尝试砸门! XML如何描述大树主干调佣子树:使用关键字 SubTree 来…...
第十六届蓝桥杯Java b组(试题C:电池分组)
问题描述: 输入格式: 输出格式: 样例输入: 2 3 1 2 3 4 1 2 3 4 样例输出: YES NO 说明/提示 评测用例规模与约定 对于 30% 的评测用例,1≤T≤10,2≤N≤100,1≤Ai≤10^3。对于 100…...
HarmonyOS:使用Refresh组件实现页面下拉刷新
一、前言 可以进行页面下拉操作并显示刷新动效的容器组件。 说明 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。该组件从API Version 12开始支持与垂直滚动的Swiper和Web的联动。当Swiper设置loop属性为true时&…...
Python----机器学习(基于PyTorch的垃圾邮件逻辑回归)
Logistic Regression(逻辑回归)是一种用于处理二分类问题的统计学习方法。它基于线性回归 模型,通过Sigmoid函数将输出映射到[0, 1]范围内,表示概率。逻辑回归常被用于预测某个实 例属于正类别的概率。 一、数据集介绍 本例使用了…...
Spark-SQL
概念 Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块。 Spark-SQL 特点: 1,易整合,无缝的整合了 SQL 查询和 Spark 编程。 2,统一的数据访问,使用相同的方式连接不同的数据源。 3…...
spark-sql核心
在大数据处理领域,Apache Spark已成为极为重要的分布式计算框架,而Spark SQL作为其重要组件,极大地拓展了Spark的能力边界,为结构化数据处理提供了高效、便捷的解决方案。 一、Spark SQL架构剖析 Spark SQL的架构设计精妙&#…...
TypeScript 进阶指南 - 使用泛型与keyof约束参数
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…...
labview的VI密码破解程序
上图即为密码破解原理,若需源代码可联系我...
AI技术前沿:蓝耘元生代智算云快速入门教程详解,与其他云人工智能大模型深度对比
文章目录 一、前言二、蓝耘元生代智算云基础概念2.1 什么是智算云2.2 蓝耘元生代智算云的特点 三、蓝耘元生代智算云使用前准备3.1 注册与登录3.2 了解计费方式3.3 熟悉控制台界面 四、在蓝耘元生代智算云上运行第一个任务4.1 创建计算资源4.2 上传代码和数据4.3 安装依赖库4.4…...
Spring MVC 请求处理流程详解
步骤1:用户发起请求 所有请求首先被 DispatcherServlet(前端控制器)拦截,它是整个流程的入口。 DispatcherServlet 继承自 HttpServlet,通过 web.xml 或 WebApplicationInitializer 配置映射路径(如 /&…...
金融行业 AI 报告自动化:Word+PPT 双引擎生成方案
—从数据到决策,10倍效率提升的智能金融解决方案 一、金融行业报告制作的四大核心痛点 1. 人工制作成本高 传统流程耗时: 分析师撰写Word报告:8-12小时/份设计师制作PPT:4-6小时/份团队协作修改:反复沟通,…...
01_JDBC
文章目录 一、概述1.1、什么是JDBC1.2、JDBC原理 二、JDBC入门2.1、准备工作2.1.1、建库建表2.1.2、新建项目 2.2、建立连接2.2.1、准备四大参数2.2.2、加载驱动2.2.3、准备SQL语句2.2.4、建立连接2.2.5、常见问题 2.3、获取发送SQL的对象2.4、执行SQL语句2.5、处理结果2.6、释…...
三层架构与分层解耦:深入理解IOC与DI设计模式
目录 一、软件架构演进与三层架构概述 1.1 从单体架构到分层架构 1.2 经典三层架构详解 1.3 三层架构的优势 二、分层解耦的核心思想 2.1 耦合与解耦的基本概念 2.2 分层解耦的实现手段 2.3 分层解耦的实践原则 三、控制反转(IOC)深度解析 3.1…...
[react]Next.js之自适应布局和高清屏幕适配解决方案
序言 阅读前首先了解即将要用到的两个包的作用 1.postcss-pxtorem 自动将 CSS 中的 px 单位转换为 rem 单位按照设计稿尺寸直接写 px 值,由插件自动计算 rem 值 2.amfe-flexible 动态设置根元素的 font-size(即 1rem 的值)根据设备屏幕宽度和…...
TensorFlow深度学习实战——基于语言模型的动态词嵌入技术
TensorFlow深度学习实战——基于语言模型的动态词嵌入技术 0. 前言1. 基于语言模型的词嵌入1.1 ELMo 与 ULMFiT1.2 GPT1.3 BERT 2. 使用 BERT 作为特征提取器相关链接 0. 前言 基于语言模型的词嵌入技术,通过利用上下文信息来生成动态的词向量,大大提升…...
欧拉服务器操作系统部署deekseep(Ollama+DeekSeep+open WebUI)
一、解压并安装 Ollama # 1. 解压文件(默认会得到一个二进制文件) tar -xzvf ollama-linux-amd64.tgz# 2. 将二进制文件安装到系统路径 sudo mv ollama /usr/local/bin/ sudo chmod x /usr/local/bin/ollama# 3. 验证安装 ollama --version链接…...
cocosCreator安卓隐私弹窗(链接版)
每次新上游戏都要重新弄这个隐私弹窗,记录一下下次直接抄。 一、创建Activity 1 用androidStudio 打开项目并切换到Android视角。 2 右键项目new一个空的Activity 3 修改Activity的名字并完成如下图 二、增加依赖文件 1 增加全局颜色定义文件:项目根目录 / res/values/ …...
统计销量前十的订单
传入参数: 传入begin和end两个时间 返回参数 返回nameList和numberList两个String类型的列表 controller层 GetMapping("/top10")public Result<SalesTop10ReportVO> top10(DateTimeFormat(pattern "yyyy-MM-dd") LocalDate begin,Dat…...
【Python爬虫】简单案例介绍2
本文继续接着我的上一篇博客【Python爬虫】简单案例介绍1-CSDN博客 目录 跨页 3.2 环境准备 跨页 当对单个页面的结构有了清晰的认识并成功提取数据后,接下来就需要考虑页面之间的跨页问题。此时我们便迎来了下一个关键任务:如何实现跨页爬取…...
适合单片机裸机环境的运行的软件定时器框架
如下这篇文档介绍了一个适用于裸机环境的软件定时器模块,其核心功能和实现如下: 模块功能:该模块通过硬件定时器中断实现时基累加,适合用于裸机程序的调度处理。它使用硬件定时中断(如1ms一次)来增加hw_ti…...
【ComfyUI】蓝耘元生代 | ComfyUI深度解析:高性能AI绘画工作流实践
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能(AI)通过算法模拟人类智能,利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络(如ChatGPT&…...
js的es6模块中 暴露的使用方法简介
在 JavaScript 的 ES6 模块系统中,一个模块文件只能有一个 export default。export default 用于导出一个默认值,这个默认值在导入时可以使用任意名称。 示例: 导出默认值: // myModule.jsexport default function greet() {con…...
基于Android的旅游自助APP(源码+lw+部署文档+讲解),源码可白嫖!
摘要 旅游自助APP设计的目的是为用户提供对景点信息和路线攻略、周边美食等方面的平台。 与PC端应用程序相比,旅游自助的设计主要面向于旅行者,旨在为用户提供一个旅游自助。用户可以通过APP及时景点信息,并对景点进行购票或收藏等。相反&am…...
SQL(7):合并字段,使用UNION,首先应使用SELECT进行检索,再使用UMION进行拼接
核心功能:合并查询结果 想象一下,你有两个不同的名单,你想把它们合并成一个大名单。UNION 和 UNION ALL 都是 SQL 里用来干这个“合并名单”的活儿的。它们可以把两个(或更多)SELECT 查询语句的结果合并到一起&#x…...
Spring MVC 全栈指南:RESTful 架构、核心注解与 JSON 实战解析
目录 RESTful API 设计规范Spring MVC 核心注解解析静态资源处理策略JSON 数据交互全解高频问题与最佳实践 一、RESTful API 设计规范 1.1 核心原则 原则说明示例 URI资源为中心URI 使用名词(复数形式)/users ✔️ /getUser ❌HTTP 方法语义化GET&…...
【第43节】实验分析windows异常分发原理
目录 前言 一、异常处理大致流程图 二、实验一:分析 KiTrap03 三、实验二:分析CommonDispatchException 四、代码探究:分析 KiDispatchException 函数 五、代码探究:伪代码分析用户层KiUserExceptionDispatcher 前言 在Wind…...
自动化测试概念篇
文章目录 目录1. 自动化1.1 自动化概念1.1.1 回归测试 1.2 自动化分类1.3 自动化测试金字塔 2. web自动化测试2.1 驱动2.1.1 安装驱动管理2.1.2 selenium库 3. Selenium3.1 一个简单的web自动化示例3.2 selenium驱动浏览器的工作原理 目录 自动化web自动化测试Selenium 1. 自…...
「数据可视化 D3系列」之开篇:开启数据可视化之旅
一、系列介绍 欢迎来到《快速学习D3.js》系列!在这个系列中,我们将一起从零开始掌握D3.js(Data-Driven Documents),一个强大的JavaScript库,用于创建动态、交互式的数据可视化。 无论你是前端开发者、数据…...
编译构建 WSO2 产品时的一些注意事项
编译构建 WSO2 产品时的一些注意事项 1、JDK 版本2、maven 版本3、npm 和 node 版本4、编译命令示例 1、JDK 版本 对于 WSO2 ESB、WSO2 EI 老产品,可以直接使用 JDK 1.8对于 WSO2 APIM、WSO2 IS、WSO2 MI 等产品的新版本,需要 JDK 11 以上 特别注意&…...
字符串与相应函数(下)
字符串处理函数分类 求字符串长度:strlen长度不受限制的字符串函数:strcpy,strcat,strcmp长度受限制的字符串函数:strncpy,strncat,strncmp字符串查找:strstr字符串切割:strtok错误信息报告:strerror字符操作…...
驾驭 Linux 云: JavaWeb 项目安全部署
目录 1. 引言 2. Linux 基础指令 2.1 ls 展示目录/文件 2.2 pwd 查看所在路径 2.3 mkdir 创建文件夹 2.4 cd 切换路径 2.5 touch 创建文件 2.6 rm 删除文件 2.6 rm -r/rf 删除文件夹 2.7 rz/sz 上传/下载文件 2.7.1 rz 上传文件 2.7.2 sz 下载文件 2.8 mv 移动文件…...
【MySQL数据库】InnoDB存储引擎:逻辑存储结构、内存架构、磁盘架构
逻辑存储结构 一个数据库是由一张张表组成的,而表中是由一个个段构成的,一个段是由区构成的,区空间是由页构成的,页是行构成的。 ①表空间:.ibd文件,一个mysql实例可以对应多个表空间,用于存储…...
HJ16 购物单
https://www.nowcoder.com/exam/oj/ta?tpId37 HJ16 购物单 描述 王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件。 主件可以没有附件,至多有 2个附件。附件不再有从属于自己的附件。如果要买归类为附件的物品,必…...
SLAM文献之DM-VIO: Delayed Marginalization Visual-Inertial Odometry
1. 算法概述 DM-VIO (Delayed Marginalization Visual-Inertial Odometry) 是一种基于延迟边缘化的视觉-惯性里程计算法,它结合了视觉和惯性测量单元(IMU)的数据进行位姿估计。该算法是VINS-Mono的改进版本,主要创新点在于采用了一种延迟边缘化策略&…...
【信息安全】黑芝麻A1000芯片安全启动方案
基于黑芝麻A1000芯片的安全启动方案实现指南: 一、安全启动流程架构设计 // 启动阶段状态机定义(基于A1000芯片手册) typedef enum {ROM_BOOT = 0x01, // BootROM验证 SPL_VERIFY = 0x02, // 二级加载器验证 ATF_SIGN_CHECK = 0x03, // ARM Trusted Firmware验证 OS_LOADE…...
初识Redis · list和hash类型
目录 前言: 哈希类型 基本命令 编码方式 应用场景 列表 基本命令 编码方式 应用场景 前言: 前文我们已经介绍了string的基本使用,以及对应的基本命令,最后也是简单的理解了一下string的应用场景,比如计数统计…...
golang-非orm数据库的操作与对比 database/sql、sqlx 和 sqlc
简单介绍 database/sql database/sql 是一个标准库软件包,负责与数据库(主要是 SQL 关系数据库)的连接和交互。 它为类 SQL 交互提供泛型接口、类型和方法。database/sql 在创建时将简单易用纳入考量,配置为支持与类 SQL 数据库…...
DeepSeek模型在非图形智能体的应用中是否需要GPU
答:不一定 概念 1、是否需要GPU与应用是否图形处理应用无关 2、文本内容智能体大多也需要GPU来提供更好的性能 3、DeepSeek模型在非图形智能体的应用中是否需要GPU取决于具体的模型版本和部署环境 不需要GPU的模型版本 DeepSeek-R1-1.5B: 这…...
RadioMaster POCKET遥控器进入ExpressLRS界面一直显示Loading的问题解决方法
RadioMaster POCKET遥控器进入ExpressLRS界面一直显示Loading的问题解决方法 问题描述解决方法 问题描述 有一天我发现我的 RadioMaster POCKET 遥控器进入 ExpressLRS 设置界面时,界面却一直停留在 “Loading” 状态,完全无法进入设置界面。 我并没有…...