• SpringBoot 12 整合 JDBC


    12.1 整合 JDBC


    对于数据访问层,无论是 SQL(关系型数据库)还是 NOSQL(非关系型数据库)Spring Boot 底层都是采用 Spring Data 的方式 进行统一处理。

    Spring Boot 底层都是采用 Spring Data 的方式 进行统一处理各种数据库的,Spring Data 也是 Spring 中 与 Spring BootSpring Cloud 等齐名的知名框架。

    Spring Data 官网:https://spring.io/projects/spring-data

    数据库相关的启动器:

    在这里插入图片描述

    1. 创建 Spring Boot 项目的时候,你会发现 左边依赖 有 数据库驱动的依赖。

    在这里插入图片描述

    真是可以呀,以前 数据库驱动的依赖 都得 我们自己用 maven 导入 。现在 创建 SpringBoot 就可以 单机选择 驱动依赖。NB在这里插入图片描述

    如果在创建 Spring Boot 出现 无法 连接到 服务器的现象。请 进入 All-Setting

    在这里插入图片描述
    在 输入框里面 输入 http:start.spring.io 即可。

    1. 配置连接数据库的文件(这一步是必做的,要不然咋连接数据呀。)
    • 可以使用 Yaml
    CREATE DATABASE `mybatis`;
    
    USE `mybatis`;
    
    CREATE TABLE `user`(
    	`id` INT(20) NOT NULL PRIMARY KEY,
    	`name` VARCHAR(30) DEFAULT NULL,
    	`pwd` VARCHAR(30) DEFAULT NULL
    )ENGINE=INNODB DEFAULT CHARSET=utf8;
    
    INSERT INTO `user`(`id`,`name`,`pwd`) VALUES
    (1,'王五','123456'),
    (2,'张三','123456'),
    (3,'李四','123456')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    spring:
      datasource:
        username: root
        password: 123123
        url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
        driver-class-name: com.mysql.cj.jdbc.Driver
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    DataSource dataSource 数据源,拿到这个数据源可以做很多的原生态 JDBC 操作。

    @Test
        void test() throws SQLException {
            System.out.println(dataSource.getClass());
        }
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    发现 Spring Boot 的默认数据库连接池 用的 是 hikari

        @Test
        void test() throws SQLException {
            System.out.println(dataSource.getClass());
            Connection connection = dataSource.getConnection();
            String sql = "select * from user";
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            ResultSet resultSet = preparedStatement.executeQuery();
            while(resultSet.next()){
                System.out.println(resultSet.getObject(1) + " || "
                        + resultSet.getObject(2) + " || " + resultSet.getObject(3));
            }
            connection.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述
    JdbcTemplate:不知道大家是否还记得 Template,之前在 整合 mybatis-spring 的时候 就学习过 这个 Template。

    这玩意也可以操纵数据库,而且 功能更加的完善和强大。

    但是 在使用这东西 之前,必须 要 添加 一个 依赖。

    <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-jdbcartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    可以说 JdbcTemplate 十分的 亲民,人性化。

    比如说 queryForList 返回的类型是 List> ,知道为什么用这种 携带 Map 的类型的吗。因为 这样的数据 更加的 接近于 JSON。JSON 就是 键值对形式的,所以 查询出来的数据,尽可量 全用 Map 去 接近。

    package top.muquanyu.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.List;
    import java.util.Map;
    
    @RestController
    public class JdbcController {
        @Autowired(required = false)
        JdbcTemplate jdbcTemplate;
    
        @RequestMapping("/userList")
        public List<Map<String, Object>> userList(){
            String sql = "select * from user";
            List<Map<String, Object>> list_map = jdbcTemplate.queryForList(sql);
    
            return list_map;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述

    • 查询的写法,必须得有 映射类 pojo
      在这里插入图片描述

    • 增加一条数据

        @RequestMapping("/insert")
        public String insert(){
    
            jdbcTemplate.update("insert into user(id,name,pwd) values (4,'test','123123')");
    
            return "insert_ok";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    在这里插入图片描述

    • 修改一条数据
        @RequestMapping("/update/{id}")
        public String insert(@PathVariable("id") Integer id){
    
            String sql = "update user set name = ?, pwd = ? where id = ?";
    
            Object[] params = new Object[3];
            params[0] = "修改后的名字";
            params[1] = "修改后的密码";
            params[2] = id;
    
            jdbcTemplate.update(sql,params);
    
            return "update_ok";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    在这里插入图片描述

    • 删除一条数据

    同理 用 update 即可。

  • 相关阅读:
    npx 初始化 React 项目 踩坑记录
    Excel和图片如何互相转换?有何技巧?
    GO channel 学习
    Linux--信号
    Tomcat任意文件上传漏洞(CVE-2017-12615)
    MobTech ShareSDK iOS端快速集成
    Java多线程-初阶1
    如何解读Linux Kernel OOPS信息
    股票问题一网打尽
    应届生写简历不如AI?HR招人到底看什么
  • 原文地址:https://blog.csdn.net/qq_52606908/article/details/126100950