Spring Boot操作数据库学习之整合JDBC

news2024/9/27 19:21:48

文章目录

  • 一 Spring Data简介
  • 二 Spring Boot集成JDBC
    • 2.1 项目创建步骤
    • 2.2 测试的SQL脚本
    • 2.3 编写yaml配置文件连接数据库
    • 2.4 IDEA连接数据库步骤【非必要的步骤】
    • 2.5 测试
    • 2.6 运行结果
    • 2.7 对运行结果的探究
    • 2.8 遇到的错误
      • 2.8.1 问题1:jdk编译版本
      • 2.8.2 解决方法
      • 2.8.3 问题2:spring Boot版本过高
      • 2.8.4 解决方法
    • 2.9 JdbcTemplate简介
    • 2.10 编写Controller测试
    • 2.11 遇到的问题

一 Spring Data简介

  • Spring Boot 底层都是采用 Spring Data 的方式进行统一处理各种数据库,Spring Data 也是 Spring 中与 Spring Boot、Spring Cloud 等齐名的知名项目。
  • 对于数据访问层,关系数据库【SQL】、非关系数据库【NOSQL】,Spring Boot底层都是采用Spring Boot进行统一处理。
  • Spring Boot官网
  • 数据库相关的启动器参考文档

二 Spring Boot集成JDBC

2.1 项目创建步骤

  1. 选择Spring Initializr生成器,填写相关信息
    在这里插入图片描述
  2. 选择Spring Boot版本和需要的项目依赖
  • 项目依赖
    • Spring Web
    • JDBC API
    • MYSQL Driver

MYSQL Driver和JDBC API都位于SQL选择下面

在这里插入图片描述

2.2 测试的SQL脚本

CREATE TABLE `user` (                                                                                                                                                                                              
          `id` int NOT NULL,                                                                                                                                                                                               
          `name` varchar(30) DEFAULT NULL,                                                                                                                                                                                 
          `pwd` varchar(30) DEFAULT NULL,                                                                                                                                                                                  
          `perms` varchar(100) DEFAULT NULL,                                                                                                                                                                               
          PRIMARY KEY (`id`)                                                                                                                                                                                               
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
insert into user2 values
(1,'yang','123456'),
(2,'酸梅汤小王子','888888'),      
(3,'李五','112233'),
(4,'小明','123456'),
(5,'西瓜姑娘','852963741'),
(6,'阿毛','5211314');

2.3 编写yaml配置文件连接数据库

  • 在resources目录下,创建application.xml文件,编写如下代码
spring:
  datasource:
    username: root
    password: xxxx
    url: jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver

2.4 IDEA连接数据库步骤【非必要的步骤】

  1. 打开右侧侧边栏中的数据库
  2. 点击新打开窗口的左侧+号图标
  3. 选择数据源类型
  4. 填写用户名和密码
  5. 点击测试按钮进行连接测试
  6. 选择架构,选择使用的数据库,点击确定即可

2.5 测试

  • 编写完配置文件后,SpringBoot会默认进行了自动配置
  • 在test下的测试中进行测试
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.liquibase.DataSourceClosingSpringLiquibase;
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 {
        //查看一下默认的数据源
        System.out.println(dataSource.getClass());
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        connection.close();
    }

}

2.6 运行结果

在这里插入图片描述

2.7 对运行结果的探究

  • 我们并没有手动配置,为什么是class com.zaxxer.hikari.HikariDataSource

  • 全局搜索一下,找到数据源的所有自动配置都在 :DataSourceAutoConfiguration文件

  • 可以在DataSourceAutoConfiguration文件中看到如下内容【大概在115行左右】

@Import({DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class, DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.OracleUcp.class, DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class})
protected static class PooledDataSourceConfiguration {
    protected PooledDataSourceConfiguration() {
    }
}
  • 这里导入的类都在 DataSourceConfiguration 配置类下,Spring Boot2.7.6默认使用HikariDataSource 数据源

HikariDataSource 号称 Java WEB 当前速度最快的数据源,相比于传统的 C3P0 、DBCP、Tomcat、jdbc 等连接池更加优秀;

2.8 遇到的错误

2.8.1 问题1:jdk编译版本

spring boot java: 无效的目标发行版: 17

2.8.2 解决方法

  1. 修正编辑器里的配置
    在这里插入图片描述
  2. 修正项目结构中的配置
    在这里插入图片描述
    在这里插入图片描述
  3. 修正pom.xml中的java版本
    在这里插入图片描述

2.8.3 问题2:spring Boot版本过高

  • 61.0的版本对应的是java11
  • 52.0对应的是java1.8(java8)
java: 无法访问org.springframework.boot.SpringApplication
错误的类文件: /C:/environment/apache-maven-3.6.3/maven-repo/org/springframework/boot/spring-boot/3.0.2/spring-boot-3.0.2.jar!/org/springframework/boot/SpringApplication.class
    类文件具有错误的版本 61.0, 应为 52.0
    请删除该文件或确保该文件位于正确的类路径子目录中。

2.8.4 解决方法

  • 修改pom.xml中父级spring boot的版本配置
  • 这里使用的java版本是1.8,spring boot的版本是2.7.6

作者创建项目时Spring Boot的版本是3.0.2,然后又因为版本问题将其降为2.7.6,然后又更新maven,所以这里说时Spring Boot版本为2.7.6应该是合理的

在这里插入图片描述

2.9 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方法用于执行存储过程、函数相关语句。

2.10 编写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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

/**
 * @author 缘友一世
 * date 2023/1/21-21:08
 */
@RestController
public class jdbcController {
    @Autowired
    JdbcTemplate jdbcTemplate;
    @RequestMapping("/userList")
    public List<Map<String,Object>> userList() {
        String sql="select * from user";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        return list;
    }

    @GetMapping("/addUser")
    public String addUser() {
        String sql="insert into mybatis.user(id,name,pwd) values(4,'小明','123456')";
        jdbcTemplate.update(sql);
        return "update success";
    }
    @GetMapping("/updateUser/{id}")
    public String updateUser(@PathVariable("id") int id) {
        String sql="update mybatis.user set name=?,pwd=? where id="+id;
        //封装
        Object[] objects = new Object[2];
        objects[0]="小明2";
        objects[1]="xxx";
        jdbcTemplate.update(sql,objects);
        return "updateUser-ok";
    }
    @GetMapping("/deleteUser/{id}")
    public String deleteUser(@PathVariable("id") int id) {
        String sql="delete from mybatis.user where id=?";
        jdbcTemplate.update(sql,id);
        return "deleteUser success";
    }
}

2.11 遇到的问题

  • 启动后访问相关页面,找不到页面
This application has no explicit mapping for /error, so you are seeing this as a fallback.
  • 原因
    • Controller目录创建的位置有误
  • 解决方法
    • 将Controller层放到SpringbootDataApplication的同目录下
      在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

低成本搭建一台 Unraid 家庭存储服务器:中篇

虎年最后一篇文章&#xff0c;接着上一篇内容&#xff0c;聊聊如何提升硬件的易用性问题。 写在前面 如果你的诉求非常简单、明确&#xff0c;不需要界面&#xff0c;上一篇内容中的 Ubuntu Server 应该已经能够完成你的诉求了。 但是&#xff0c;如果你和我一样&#xff0c…

【Java数据结构与算法】day4-稀疏数组和队列(环形队列)

✅作者简介&#xff1a;热爱Java后端开发的一名学习者&#xff0c;大家可以跟我一起讨论各种问题喔。 &#x1f34e;个人主页&#xff1a;Hhzzy99 &#x1f34a;个人信条&#xff1a;坚持就是胜利&#xff01; &#x1f49e;当前专栏&#xff1a;Java数据结构与算法 &#x1f9…

第五届字节跳动青训营 前端进阶学习笔记(七)HTTP协议入门

文章目录前言HTTP协议概述1.输入网址到页面加载完成中间发生了什么2.HTTP协议3.HTTP协议的发展历程4.HTTP报文结构&#xff08;1&#xff09;HTTP请求报文&#xff08;2&#xff09;HTTP响应报文5.请求方法&#xff08;1&#xff09;安全的方法&#xff08;2&#xff09;幂等6.…

表单标签的学习

表单标签的学习 textarea textarea标签来表示多行文本框&#xff0c;又叫做文本域。与其它 标签不同&#xff0c; textarea标签是单闭合标签&#xff0c;它包含起始标签和结束标签&#xff0c;文本内容需要写在两个标签中间。 input input type“text” 表示文本框 &#xff…

CSS入门学习笔记+案例

目录 一、 CSS的基础 1、快速了解 2、CSS应用方式 ①在标签上 ②在head标签中写style标签 ③写到文件中 二、CSS的选择器 1、ID选择器 2、类选择器 3、标签选择器 4、属性选择器 5、后代选择器 三、样式覆盖 四、CSS的样式 1、高度和宽度 2、块级和行内标签 3、字体…

七大排序---详细介绍

插入排序从第二个数&#xff0c;往前面进行插入&#xff0c;默认第一个数字有序&#xff0c;插入第二个&#xff0c;则前两个都有序了&#xff0c;一个一个往后选择数字&#xff0c;不断向前进行插入直接插入排序时间复杂度&#xff1a;最好情况&#xff1a;全部有序&#xff0…

决策树应用

使用Python中的sklearn中自带的决策树分类器DecisionTreeClassifier import sklearn clf sklearn.tree.DecisionTreeClassifier(criterionentropy)sklearn中只实现了ID3与CART决策树&#xff0c;所以我们暂时只能使用这两种决策树&#xff0c;在构造DecisionTreeClassifier类…

计算机视觉OpenCv学习系列:第六部分、图像操作-2

第六部分、图像操作-2第一节、图像几何形状绘制1.几何形状2.填充、绘制与着色3.代码练习与测试第二节、多边形填充与绘制1.多边形绘制函数2.绘制与填充3.代码练习与测试第三节、图像像素类型转换与归一化1.归一化方法与支持2.归一化函数3.代码练习与测试第四节、图像几何变换1.…

小智学长嵌入式入门学习路线_1 C语言基础

原课程链接&#xff1a; 嵌入式开发系统学习路线 从基础到项目 精品教程 单片机工程师必备课程 物联网开发 c语言 2022追更 前言 在学习过程中&#xff0c;老师提到了一个很重要的思想&#xff1a;主要从学习嵌入式的角度学习各项技能。比如c语言&#xff0c;语法有很多&…

【Java|golang】1807. 替换字符串中的括号内容

给你一个字符串 s &#xff0c;它包含一些括号对&#xff0c;每个括号中包含一个 非空 的键。 比方说&#xff0c;字符串 “(name)is(age)yearsold” 中&#xff0c;有 两个 括号对&#xff0c;分别包含键 “name” 和 “age” 。 你知道许多键对应的值&#xff0c;这些关系由…

Linux基本功系列之chmod命令实战

文章目录一. chmod命令介绍二. 语法格式及常用选项三. 参考案例3.1 对全部用户增加写的权限3.2 所有用户减去读的权限3.3 给文件的所有者和所有组加上读写权限3.4 设置所有用户为读写执行的权限3.5 文件拥有着为rwx&#xff0c;所属组为rw&#xff0c;其它为r3.6 去掉所有者的r…

高级Spring之ApplicationContext功能

第一步&#xff0c;我们先来看这个接口的内部结构&#xff0c;了解别人的内部&#xff0c;知己知彼&#xff0c;百战不殆&#xff1a; 这个接口的扩展功能主要体现在它继承的四个接口上&#xff1a; MessageSource&#xff1a;国际化功能 ResourcePatternResolver: 资源访问功…

第23章_Tomcat和JavaEE入门

一、JavaEE简介什么是JavaEEJavaEE&#xff08;Java Enterprise Edition&#xff09;&#xff0c;Java企业版&#xff0c;是一个用于企业级web开发平台。最早由Sun公司定制并发布&#xff0c;后由Oracle负责维护。JavaEE平台规范了在开发企业级web应用中的技术标准.在JavaEE平台…

Acwing——第 87 场周赛

题目链接 4797. 移动棋子 4798. 打怪兽 4799. 最远距离 题目描述 4797. 移动棋子 给定一个 5 行 5 列的方格矩阵&#xff0c;其中一个方格中有一个棋子。 现在&#xff0c;我们希望将棋子移动至矩阵的最中心方格中&#xff0c;即将其移动至矩阵的第 3行第 3列方格中。 每次…

8种时间序列分类方法总结

对时间序列进行分类是应用机器和深度学习模型的常见任务之一。本篇文章将涵盖 8 种类型的时间序列分类方法。这包括从简单的基于距离或间隔的方法到使用深度神经网络的方法。这篇文章旨在作为所有时间序列分类算法的参考文章。 时间序列定义 在涵盖各种类型的时间序列 (TS) 分…

分布式锁与实现(一)-为什么需要分布式锁

1 在开发中的锁是什么 在计算机科学中&#xff0c;锁是在执行多线程时用于强行限制资源访问的同步机制&#xff0c;即用于在并发控制中保证对互斥要求的满足。 在java中我们有两种资源控制方式Synchronized与AQS 1.2 基于Synchronized实现的锁控制 Synchronized是java提供的一…

JDK 8新特性之Lambda表达式

目录 一&#xff1a;使用匿名内部类存在的问题 Lambda表达式写法,代码如下&#xff1a; 二&#xff1a;Lambda的标准格式 三&#xff1a;Lambda的实现原理 四&#xff1a;Lambda省略格式 五&#xff1a;Lambda的前提条件 六&#xff1a;函数式接口 七&#xff1a;Lambd…

05回溯法

文章目录装载问题回溯算法优化算法构造最优解0-1背包问题批处理作业调度问题图的M着色问题N皇后问题最大团问题回溯算法实际上一个类似枚举的搜索尝试过程&#xff0c;主要是在搜索尝试过程中寻找问题的解&#xff0c;当发现已不满足求解条件时&#xff0c;就“回溯”返回&…

12. 字典dict类型详解

1. 基础知识 (1) 字典(dictionary)是Python中另一个非常有用的内置数据类型。 (2) 列表是有序的对象集合&#xff0c;字典是无序的对象集合。两者之间的区别在于&#xff1a;字典当中的元素是通过键来存取的&#xff0c;而不是通过偏移存取。 (3) 字典是一种映射类型&#xff…

Flowable进阶学习(三)流程、流程实例挂起与激活;启动、处理、结束流程的原理以及相关表结构与变动

文章目录流程挂起与激活流程实例挂起与激活启动、处理、结束流程的原理一、启动流程的原理启动一个流程实例时涉及到的表及表结构:ACT_RU_EXECUTION 运行时流程执行实例ACT_RU_IDENTITYLINK 运行时用户关系信息ACT_RU_TASK 运行时任务表ACT_RU_VARIABLE 运行时变量表二、处理流…