【WEEK12】 【DAY1】整合JDBC【中文版】
2024.5.13 Monday
目录
- 11.整合JDBC
- 11.1.SpringData简介
- 11.2.新建springboot-04-data项目
- 11.3.新建application.yaml
- 11.4.连接数据库
- 11.5.修改Springboot04DataApplicationTests.java
- 11.5.1.查看DataSourceProperties.java和DataSourceAutoConfiguration.java
- 11.6.JDBCTemplate
- 11.7.测试
- 11.7.1.新建JDBCController.java
- 11.7.2.运行springboot-04-data
- 11.7.3.修改JDBCController.java(增、删、改)
- 11.7.3.1.Add
- 11.7.3.2.Update
- 11.7.3.3.Delete
- 11.8.查看源码
- 11.8.1.DataSourceAutoConfiguration.java
- 11.8.2.ConditionalOnProperty.java
11.整合JDBC
11.1.SpringData简介
- 对于数据访问层,无论是 SQL(关系型数据库) 还是 NOSQL(非关系型数据库),Spring Boot 底层都是采用 Spring Data 的方式进行统一处理。
- Spring Boot 底层都是采用 Spring Data 的方式进行统一处理各种数据库,Spring Data 也是 Spring 中与 Spring Boot、Spring Cloud 等齐名的知名项目。
- Sping Data 官网:
https://spring.io/projects/spring-data - 数据库相关的启动器 :可以参考官方文档:
https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/htmlsingle/#using-boot-starter
11.2.新建springboot-04-data项目


添加maven支持(在Project Structure->Modules点击加号添加对应项目),按照惯例修改settings中的maven,jdk和Java版本,Project Structure中的jdk和Java版本。修改pom中的springframework版本到2.7.13,重新加载Maven,删除多余文件。
配图版请见:新建springboot项目后需要配置的内容
11.3.新建application.yaml

根据个人已有数据库编辑代码:
spring:datasource:username: rootpassword: 123456url: jdbc:mysql://localhost:3306/p37jdbc?useUnicode=true&characterEncoding=utf-8driver-class-name: com.mysql.jdbc.Driver
11.4.连接数据库


选一个有参数的数据库表


11.5.修改Springboot04DataApplicationTests.java
package com.P31;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;@SpringBootTest
class Springboot04DataApplicationTests {@AutowiredDataSource dataSource;@Testvoid contextLoads() throws SQLException {//查看默认的数据源(运行后可以在最后一行看到)是:com.zaxxer.hikari.HikariDataSourceSystem.out.println(dataSource.getClass());//获取数据库连接Connection connection = dataSource.getConnection();System.out.println(connection);//看到xxxxTemplate->这是SpringBoot已经配置好的模板bean,拿来即用//关闭connection.close();}}
以下这段红字提示的版本过时可以忽略,默认数据源是相比其他数据源运行更快的那一个:

在新版本里刷新可能出现以下错误:

此时需要修改application.yaml中的时区设置:
spring:datasource:username: rootpassword: 123456#假如时区报错,就增加一个时区的配置,和其他配置用&连接,如:serverTimezone=UTCurl: jdbc:mysql://localhost:3306/p37jdbc?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8driver-class-name: com.mysql.cj.jdbc.Driver

11.5.1.查看DataSourceProperties.java和DataSourceAutoConfiguration.java
这是数据库可以自动配置的原理


11.6.JDBCTemplate
- 有了数据源(com.zaxxer.hikari.HikariDataSource),然后可以拿到数据库连接(java.sql.Connection),有了连接,就可以使用原生的 JDBC 语句来操作数据库;
- 即使不使用第三方第数据库操作框架,如 MyBatis等,Spring 本身也对原生的JDBC 做了轻量级的封装,即JdbcTemplate。
- 数据库操作的所有 CRUD 方法都在 JdbcTemplate 中。
- Spring Boot 不仅提供了默认的数据源,同时默认已经配置好了 JdbcTemplate 放在了容器中,程序员只需自己注入即可使用
- JdbcTemplate 的自动配置是依赖 org.springframework.boot.autoconfigure.jdbc 包下的 JdbcTemplateConfiguration 类
JdbcTemplate主要提供以下几类方法:
- execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
- update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
- query方法及queryForXXX方法:用于执行查询相关语句;
- call方法:用于执行存储过程、函数相关语句。
11.7.测试
新建controller文件夹
11.7.1.新建JDBCController.java
查询指定表中的所有数据

package com.P31.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
import java.util.Map;@RestController
public class JDBCController {@AutowiredJdbcTemplate jdbcTemplate; //可以点开JdbcTemplate查看//查询数据库的所有信息//没有实体类,怎么获取数据库中的信息?->使用Map@GetMapping("/userList")public List<Map<String,Object>> userList(){String sql = "SELECT * FROM users";List<Map<String,Object>> list_maps = jdbcTemplate.queryForList(sql);return list_maps;}
}
11.7.2.运行springboot-04-data
记得选择

清空浏览器缓存,然后访问:http://localhost:8080/userList

和数据库中相同

11.7.3.修改JDBCController.java(增、删、改)
package com.P31.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
import java.util.Map;@RestController
public class JDBCController {@AutowiredJdbcTemplate jdbcTemplate; //可以点开JdbcTemplate查看//查询数据库的所有信息//没有实体类,怎么获取数据库中的信息?->使用Map@GetMapping("/userList")public List<Map<String,Object>> userList(){String sql = "SELECT * FROM users";List<Map<String,Object>> list_maps = jdbcTemplate.queryForList(sql);return list_maps;}//增加@GetMapping("/addUser")public String addUser(){String sql = "INSERT INTO p37jdbc.users(id,NAME,PASSWORD,email,birthday) VALUES(6,'ZHAOSI','312321','111@outlook','2024-05-05')";jdbcTemplate.update(sql);return "completed add";}//更新@GetMapping("/updateUser/{id}")public String updateUser(@PathVariable("id") int id){String sql = "UPDATE p37jdbc.users SET NAME=?,PASSWORD=? WHERE id="+id;//封装Object[] objects = new Object[2];objects[0] = "ZHENGSAN";objects[1] = "12121212";jdbcTemplate.update(sql,objects);return "completed update";}//删除@GetMapping("/deleteUser/{id}")public String deleteUser(@PathVariable("id") int id){String sql = "DELETE FROM p37jdbc.users WHERE id=?";jdbcTemplate.update(sql,id);return "completed delete";}
}
11.7.3.1.Add
http://localhost:8080/addUser


11.7.3.2.Update
http://localhost:8080/updateUser/5


11.7.3.3.Delete
http://localhost:8080/deleteUser/4


11.8.查看源码
11.8.1.DataSourceAutoConfiguration.java
数据源:
@Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class,DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.OracleUcp.class,DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class })

这些数据源会在pom.xml中导入JDBC包后自动引用
如果想要自定义:修改type

11.8.2.ConditionalOnProperty.java
点击DataSourceAutoConfiguration.java中的name跳转到此文件(由于版本不同,理应跳转到DataSourceConfiguration.java),可见其中提供了自定义的方式和自动注入的设置。

相关文章:
【WEEK12】 【DAY1】整合JDBC【中文版】
2024.5.13 Monday 目录 11.整合JDBC11.1.SpringData简介11.2.新建springboot-04-data项目11.3.新建application.yaml11.4.连接数据库11.5.修改Springboot04DataApplicationTests.java11.5.1.查看DataSourceProperties.java和DataSourceAutoConfiguration.java 11.6.JDBCTempla…...
23种设计模式(软考中级 软件设计师)
设计模式 23个设计模式,23个意图 1. 设计模式概要 设计模式的核心在于提供了相关问题的解决方案,使得人们可以更加简单方便的复用成功的设计和体系结构 设计模式的类别 创建型结构型行为型类工厂方法模式适配器模式(类)解释器模…...
记录一下 log4j的漏洞
目录 背景 bug的产生 bug复现 JNDI 网络安全学习路线 (2024最新整理) 学习资料的推荐 1.视频教程 2.SRC技术文档&PDF书籍 3.大厂面试题 特别声明: 背景 log4j这次的bug,我相信大家都已经知道了,仅以…...
Springboot-配置文件中敏感信息的加密:三种加密保护方法比较
一. 背景 当我们将项目部署到服务器上时,一般会在jar包的同级目录下加上application.yml配置文件,这样可以在不重新换包的情况下修改配置。 一般会将数据库连接、Redis连接等放到配置文件中。 例如配置数据库连接: spring:servlet:multip…...
linux 性能监控命令之dstat
1. dstat 系统默认为安装,直接安装阿里源后,yum install -y dstat安装即可,该命令整合了 vmstat , iostat 和 ifstat,我们先看下效果: 我们先看看具体参数: [rootk8s-master ~]# dstat --help …...
花趣短视频源码淘宝客系统全开源版带直播带货带自营商城流量主小游戏功能介绍
1、首页仿抖音短视频 ,关注 ,我的 本地 直播 可发布短视频 可录制上传 2、商城页面 广告位、淘口令识别、微信登录、淘宝登录、淘宝返佣、拼多多返佣、京东返佣、唯品会返佣、热销榜、聚划算、天猫超市、9.9包邮、品牌特卖、新人攻略 、小米有品、优惠加…...
大模型管理工具:Ollama
目录 一、Ollama 介绍 二、Linux 安装 Ollama 2.1 一键安装 2.2 手动安装 三、使用Ollama 3.1 配置模型下载路径 3.2 运行模型 3.3 常用命令 四、模型管理 4.1 官方模型库 4.2 导入自定义模型 五、REST API 六、Web UI 一、Ollama 介绍 Ollama 是一个基于 Go 语言…...
recycleView的item,TV正确方式获取焦点,以及刷新界面
如果你正需要recycleView的焦点 GlobalScope.launch (Dispatchers.Main){ // layout.isVisible truesettingBinding.rootLayout.isVisible truesettingBinding.rvSettingTab.layoutManager?.scrollToPosition(itemPositionSelect)if(!GlobalVariable.isT…...
QT内存管理机制
1.父子关系管理:Qt 对象之间可以建立父子关系。当一个对象是另一个对象的子对象时,父对象负责管理子对象的生命周期。当父对象被销毁时,它所拥有的子对象也会被销毁,从而释放相关的内存。这种机制简化了内存管理,确保在…...
亚马逊卖家,如何打造爆款,如何提高产品权重、曝光、流量?
新老卖家们要知道,亚马逊A9算法影响产品排名的关键因素:产品相关性、销售排名、产品价格、点击率、转化率、产品图片、买家评论、买家满意度、QA的答复情况、搜索结果页详细信息级别。亚马逊A9算法,是根据卖家提供的listing文案信息进行收录、…...
处理HTTP请求的服务器
处理HTTP请求的服务器,通常被称为HTTP服务器或Web服务器。其主要功能包括接收、解析、处理和响应HTTP请求。 HTTP服务器处理HTTP请求的基本流程: 接收请求:服务器监听特定的网络端口,等待客户端(如Web浏览器…...
打造本地GPT专业领域知识库AnythingLLM+Ollama
如果你觉得openai的gpt没有隐私,或者需要离线使用gpt,还是打造专业领域知识,可以借用AnythingLLMOllama轻松实现本地GPT. AnythingLLMOllama 实现本地GPT步聚: 1 下载 AnythingLLM软件 AnythingLLM官网地址: Anythi…...
数据可视化训练第6天(美国人口调查获得关于收入与教育背景的数据,并且可视化)
数据来源 https://archive.ics.uci.edu/dataset/2/adult 过程 首先;关于教育背景的部分翻译有问题。 本次使用字典嵌套记录数据,并且通过lambda在sorted内部进行对某个字典的排序,最后用plotly进行绘图 本次提取数据的时候,用到…...
如何更换远程服务器的Python版本
目录 前言 正文 尾声 🔭 Hi,I’m Pleasure1234🌱 I’m currently learning Vue.js,SpringBoot,Computer Security and so on.👯 I’m studying in University of Nottingham Ningbo China📫 You can reach me by url below:My Blo…...
Python 运筹优化13 Thompson Sampling 解读
说明 这部分应该是Multi-Armed Bandit的最后一部分了。 内容 1 On Line Ads 这个实验,最初的目的就是为了选出最佳的广告。首先,通过伯努利分布,模拟了某个广告的有效率。在真实场景里,我们是无法知道那个广告更好的。可能在t…...
计算机毕业设计 | SpringBoot健身房管理系统(附源码)
1,项目背景 随着人们生活水平的提高和健康意识的增强,健身行业逐渐兴起并迅速发展。而现代化的健身房管理系统已经成为健身房发展的必备工具之一。传统的健身房管理方式已经无法满足现代化健身房的需求,需要一种更加高效、智能、安全的管理系…...
大模型LLM 结合联网搜索增强isou
参考: https://github.com/yokingma/search_with_ai 在线使用网址: https://isou.chat/ 安装github下载,运行docker compose 如果一直报下面错误: 解决方法https://github.com/yokingma/search_with_ai/pull/7 默认打开&a…...
软删除和硬删除的区别及实际应用
在处理数据存储时,删除操作是不可避免的一部分。然而,并非所有的删除都是相同的。在本篇博客中,我们将探讨软删除(Soft Delete)和硬删除(Hard Delete)的概念、它们之间的区别,以及如…...
算法加密-简介
前言 在遥远的古代,信息的传递至关重要。战争时期,将领们需要确保自己的作战计划不被敌人知晓。 有一次,一位聪明的将军想要给远方的盟友传递一份机密战略部署。他想到了一个办法,用一种特殊的符号来替代文字。他和盟友事先约定好…...
搞懂Docker(九)- 使用Docker Compose
获取示例程序 示例程序 或者 示例程序 获取示例程序程序结构如下├── getting-started-app/ │ ├── package.json │ ├── README.md │ ├── spec/ │ ├── src/ │ └── yarn.lock使用Docker Compose Docker Compose是一个帮助你定义和共享多容器应用程序的工具…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
