【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: root
    password: 123456
    url: jdbc:mysql://localhost:3306/p37jdbc?useUnicode=true&characterEncoding=utf-8
    driver-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 {

    @Autowired
    DataSource dataSource;

    @Test
    void contextLoads() throws SQLException {
        //查看默认的数据源(运行后可以在最后一行看到)是:com.zaxxer.hikari.HikariDataSource
        System.out.println(dataSource.getClass());

        //获取数据库连接
        Connection connection = dataSource.getConnection();
        System.out.println(connection);

		//看到xxxxTemplate->这是SpringBoot已经配置好的模板bean,拿来即用

        //关闭
        connection.close();
    }

}

以下这段红字提示的版本过时可以忽略,默认数据源是相比其他数据源运行更快的那一个:
在这里插入图片描述

在新版本里刷新可能出现以下错误:
在这里插入图片描述

此时需要修改application.yaml中的时区设置:

spring:
  datasource:
    username: root
    password: 123456
    #假如时区报错,就增加一个时区的配置,和其他配置用&连接,如:serverTimezone=UTC
    url: jdbc:mysql://localhost:3306/p37jdbc?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver

在这里插入图片描述

11.5.1.查看DataSourceProperties.java和DataSourceAutoConfiguration.java

这是数据库可以自动配置的原理
在这里插入图片描述
在这里插入图片描述

11.6.JDBCTemplate

  1. 有了数据源(com.zaxxer.hikari.HikariDataSource),然后可以拿到数据库连接(java.sql.Connection),有了连接,就可以使用原生的 JDBC 语句来操作数据库;
  2. 即使不使用第三方第数据库操作框架,如 MyBatis等,Spring 本身也对原生的JDBC 做了轻量级的封装,即JdbcTemplate。
  3. 数据库操作的所有 CRUD 方法都在 JdbcTemplate 中。
  4. Spring Boot 不仅提供了默认的数据源,同时默认已经配置好了 JdbcTemplate 放在了容器中,程序员只需自己注入即可使用
  5. 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 {
    @Autowired
    JdbcTemplate 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 {
    @Autowired
    JdbcTemplate 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),可见其中提供了自定义的方式和自动注入的设置。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/624204.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在CentOS 7服务器及Windows 10客户端间建立并配置NFS服务

在CentOS 7服务器及Windows 10客户端间建立并配置NFS服务 引言 网络文件系统(Network File System)&#xff0c;简称NFS&#xff0c;是一种分布式文件系统协议。它允许网络上的客户端机器像访问本地磁盘文件一样&#xff0c;通过网络访问服务器上的文件。在某些特定的业务场景中…

机器学习材料性能预测与材料基因工程应用实战

传统的材料研发技术是通过实验合成表征对材料进行试错和验证&#xff0c;而过去的计算手段受限于算法效率&#xff0c;无法有效求解实际工业生产中面临的复杂问题。 近几年随着大数据和人工智能介入&#xff0c;通过采用支持向量机、神经网络等机器学习算法训练数据集来构建模…

【JAVA】BOSS系统发版艺术:构建高效、优雅的微服务部署策略

在现代软件开发领域&#xff0c;微服务架构与容器化部署已迅速成为行业新趋势。微服务架构通过将应用拆分成多个小型、自治的服务单元&#xff0c;每个服务承担某项特定的业务功能。而容器化部署则以其轻量级和高度可移植的特性&#xff0c;为这些微服务的有效打包、分发和运行…

ApiHug 官方

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | MarketplaceApiHug-H…

java版数据结构:二叉树

引言&#xff1a;什么是树 树是一种非线性的数据结构&#xff0c;由节点组成&#xff0c;节点之间以边连接。树结构中最重要的特点是&#xff0c;每个节点可以有多个子节点&#xff0c;但每个节点只有一个父节点&#xff08;除了根节点&#xff09;。树结构中没有环路&#xff…

水雨情监测系统—实时监测水位信息

TH-SW3水雨情监测系统是一种专门用于实时监测和收集水文气象数据的自动化系统。它能够实时获取区域内降雨和水情数据&#xff0c;并将其存储到数据库中进行分析处理&#xff0c;从而为防汛指挥人员提供及时准确的信息服务。 水雨情监测系统的主要功能包括实时监测水位、流速、流…

第十一届蓝桥杯大赛软件类决赛 Java A 组

文章目录 发现宝藏【考生须知】试题 A: 合数个数试题 B : 含 2 天数试题 C: 本质上升序列试题 D: 迨尺天涯试题 E: 玩具蛇试题 F: 游园安排试题 G: 画廊试题 H: 奇偶覆盖试题 I: 补给试题 J: 蓝跳跳 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&…

基于C++基础知识的指针

一、变量与指针 在C中&#xff0c;变量是用来存储数据的一个标识符&#xff0c;而指针是一个变量&#xff0c;该变量存储的是另一个变量的地址。 变量可以是不同的数据类型&#xff0c;包括整数&#xff08;int&#xff09;、浮点数&#xff08;float&#xff09;、字符&#…

deveco studio 打开官方案例,不显示运行按钮。

就拿官方的search举例好了 git 地址 https://gitee.com/harmonyos/samples/tree/master/ETSUI/Search 使用deveco studio打开Search项目&#xff0c;打开Tools->Device-Manager中的Local Emulator本地模拟器&#xff0c; 此时会发现&#xff0c;运行按钮是灰色的&#xff0…

OVZ虚拟化:解锁高性能的虚拟化利器

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 OVZ虚拟化&#xff1a;解锁高性能的虚拟化利器 前言OVZ虚拟化简介OVZ虚拟化的优势OVZ虚拟化的应用场景OVZ虚拟化的部署与管理 前言 在当今快节奏的数字时代&#xff0c;虚拟化技术是推动云计算和容器…

通用人工智能将如何重塑未来

通用人工智能(AGI)是一种人工智能&#xff0c;具有与人类一样的获取知识、应用知识解决问题和理解能力。与专门处理受限任务的狭义人工智能系统不同&#xff0c;AGI寻求发展先进的认知技能&#xff0c;以促进在不同情况下完成复杂任务。AGI是一种人工智能&#xff0c;试图模仿人…

下载源代码并交叉编译riscv FreeBSD系统和内核

RISCV系统曾经让人神秘到无法接触&#xff0c;交叉编译更是只有耳闻&#xff0c;现在随着RISCV的普及&#xff0c;它们神秘的面纱已经被慢慢揭开。 交叉编译作为RISCV系统中的一个重要环节&#xff0c;也随着RISCV的普及而变得更加容易理解和操作。交叉编译允许开发者在一个平…

部署达梦数据库主从配置详细操作DM8

服务器配置 主库 192.168.81.128 实例名 dm-1 从库 192.168.81.129 实例名 dm-2 以下安装部署主从服务器都操作 关闭防火墙 systemctl stop firewalld && systemctl disable firewalld 注意安装前必须创建 dmdba 用户&#xff0c;禁止使用 root 用户安装数据库。…

下载element-ui报错

此错误表示尝试从npm注册表下载“resize observer polyfill”包时超时。这可能是由于网络连接问题或npm注册表服务器的问题。 要解决此问题&#xff0c;您可以尝试以下步骤&#xff1a; 1.重试npm install命令&#xff1a;有时&#xff0c;网络问题会导致临时超时。再次运行npm…

BGP基本配置练习

要求&#xff1a;通过使用BGP来实现所有设备的环回都能ping通 实验的思路 完成所有路由器的IGP配置 使用直连接口建立EBGP对等体关系 使用环回接口建立IBGP对等体关系 使用connect-interface命令修改IBGP的源IP地址 使用next-hop-local命令修改路由传递的下一…

Funakoshi — LipiDye Ⅱ脂滴活细胞成像试剂

Funakoshi LipiDye II是一款适用于长时间活细胞成像以观察动态脂滴&#xff08;LDS&#xff09;合成、移动或降解的绿色荧光染料&#xff1b;是LipiDye&#xff08;货号&#xff1a;FDV-0010&#xff09;的升级版&#xff0c;同时具备超强的光稳定性和高灵敏度等特点。 ➧ 产品…

Cartoon Colections Flower Path 2

高质量的花为Unity游戏引擎优化! 移动优化场景 这款10款3D花卉系列,超过+55种颜色!点击 配有高品质的室内植物和花卉模型。 所有对像都可以在可视化中使用。 - 1024x1024,纹理贴图 - Poly计数:平均8500~125500 tris 下载:​​Unity资源商店链接资源下载链接 效果图:

长难句打卡5.14

This is now a question for Gloria Mackenzie, an 84-year-old widow who recently emerged from her small, tin-roofed house in Florida to collect the biggest undivided lottery jackpot in history. 翻译&#xff1a;这是84岁的孤寡老人歌莉娅 麦肯齐当前所面临的问题…

【正版系统】海外短剧系统功能介绍,前端uniapp+开源。

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、海外短剧系统功能介绍 二、搭建要求 1.系统要求 总结 前言 短剧作为一种快速、紧凑的娱乐形式&#xff0c;正逐渐受到更多海外观众的喜爱。这种需求增长为…

移动端自动化测试工具 Appium 之持续集成

文章目录 一、背景二、前置条件三、代码部分1、pom.xml文件配置2、main入口代码 四、Jenkins 部分1、下载Jenkins2、安装插件3、job配置4、选择构建 五、工程目录六、报告示例七、总结 一、背景 持续集成是老生话谈的事情&#xff0c;用的好不好&#xff0c;看自己公司与使用场…