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

【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

  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 {@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),可见其中提供了自定义的方式和自动注入的设置。
在这里插入图片描述

http://www.lryc.cn/news/348707.html

相关文章:

  • 23种设计模式(软考中级 软件设计师)
  • 记录一下 log4j的漏洞
  • Springboot-配置文件中敏感信息的加密:三种加密保护方法比较
  • linux 性能监控命令之dstat
  • 花趣短视频源码淘宝客系统全开源版带直播带货带自营商城流量主小游戏功能介绍
  • 大模型管理工具:Ollama
  • recycleView的item,TV正确方式获取焦点,以及刷新界面
  • QT内存管理机制
  • 亚马逊卖家,如何打造爆款,如何提高产品权重、曝光、流量?
  • 处理HTTP请求的服务器
  • 打造本地GPT专业领域知识库AnythingLLM+Ollama
  • 数据可视化训练第6天(美国人口调查获得关于收入与教育背景的数据,并且可视化)
  • 如何更换远程服务器的Python版本
  • Python 运筹优化13 Thompson Sampling 解读
  • 计算机毕业设计 | SpringBoot健身房管理系统(附源码)
  • 大模型LLM 结合联网搜索增强isou
  • 软删除和硬删除的区别及实际应用
  • 算法加密-简介
  • 搞懂Docker(九)- 使用Docker Compose
  • EOCRSP-40NM7施耐德电机保护器EOCR-SP
  • 一文带你快速了解GPT-4o!内含免费使用指南!
  • react18【系列实用教程】useState (2024最新版)
  • 电商选品的数据是可以用爬虫进行采集的吗?
  • 数据特征降维 | 局部线性嵌入(LLE)
  • js发票查验、票据OCR接口助力解决发票录入与真假辨别难题
  • HTML静态网页成品作业(HTML+CSS+JS)——华为商城网页(1个页面)
  • 【吃透Java手写】5-RPC-简易版
  • express 本地https服务 接口、静态文件,并支持跨域
  • 从零手写实现 tomcat-08-tomcat 如何与 springboot 集成?
  • yarn 安装以及报错处理