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

一 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 问题1jdk编译版本

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

2.8.2 解决方法

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

2.8.3 问题2spring 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.8spring 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的同目录下
      在这里插入图片描述
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Spring数据库