SpringBoot(29) ——整合JDBC使用


1.SpringData简介

  • 对于数据访问层,无论是 SQL(关系型数据库) 还是 NOSQL(非关系型数据库),Spring Boot 底层都是采用 Spring Data 的方式进行统一处理
  • Spring Boot 底层都是采用 Spring Data 的方式进行统一处理各种数据库,Spring Data 也是 Spring 中与 Spring Boot、Spring Cloud 等齐名的知名项目
  • Sping Data 官网
  • 数据库相关的启动器,可以参考官方文档,其实这个文档记录了springBoot所有启动器,与数据库相关的我们只需要找spring-boot-starter-data-xxx的启动器即可
    在这里插入图片描述

2.springBoot对JDBC的自动配置/springBoot对JDBC的封装

  • 直接上代码进行讲解
  • 创建一个新项目:springboot-04-data
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 清理项目结构,只保留有用的东西
  • 数据库操作step1,配置4大参数;springBoot对于数据库的连接也做了封装,我们只需要在配置文件中配置好4大参数即可使用
    spring:
      datasource:
        username: root
        password: 123
        url: jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=utf-8
        driver-class-name: com.mysql.jdbc.Driver
    
  • 注意:springBoot最大优点:自动配置,对于数据库连接池/数据源,springBoot当然也为我们实现了自动配置,我们可以输出看看springBoot为我们自动配置的是哪一个数据源
    package com.thhh;
    
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    import javax.sql.DataSource;
    
    @SpringBootTest
    class Springboot04DataApplicationTests {
        @Autowired
        DataSource dataSource;
        @Test
        void contextLoads() {
            System.out.println(dataSource.getClass());
        }
    }
    

在这里插入图片描述

在这里插入图片描述

  • 有了数据源我们就可以使用数据源获取数据库连接对象,这里我们获取一个连接对象并输出作为测试
    @SpringBootTest
    class Springboot04DataApplicationTests {
        @Autowired
        DataSource dataSource;
        @Test
        void contextLoads() throws SQLException {
            Connection conn = dataSource.getConnection();
            System.out.println(conn);
            conn.close();
        }
    }
    
    在这里插入图片描述
  • 因为我们使用的springBoot是最新的,最新的导致它是由的mysql配置也是最新的,在最新的MySQL8.xxx里面使用数据库必须配置时区
    在这里插入图片描述
  • 解决:在配置文件中加入时区配置
    url: jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=utf-
    8&serverTimezone=UTC  
    #时区随便配一个就可以使用,但是一般配自己所在国家的时区,所以国内正常应该使用
    #serverTimezone=Asia/Shanghai
    

在这里插入图片描述

  • 既然有了自动配置并且可以在application中进行修改配置,我们就可以找到XXXProperties,再往上找就可以找到xxxAutoConfiguration,通过查找我们确实找到了DataSourceProperties和DataSourceAutoConfiguration
  • 注意:在springBoot中有大量的XXXtemplate,这些就是springBoot自动为我们装配在spring容器中的bean,我们可以直接拿过来使用,比如jdbctemplate,我们可以去源码中验证这一说法
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
  • 测试JdbcTemplate对象的功能
  • 写一个controller来测试
  • 测试查询数据
    package com.thhh.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
        JdbcTemplate jdbcTemplate;
    
        @RequestMapping("/userlist")
        public List<Map<String,Object>> queryUserList(){
            String sql = "SELECT * FROM user";
            List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
            return maps;
        }
    }
    

在这里插入图片描述

在这里插入图片描述

  • 测试插入数据
    @RequestMapping("addUser")
    public String addUser(){
        String sql= "INSERT INTO mybatis.user(id,name,pwd) values(10,'test_JdbcTemplate','123')";
        jdbcTemplate.update(sql);
        return "update success!";
    }
    

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

  • 需要注意一点,jdbcTemplate对于数据库的操作也只是分了两种:①数据库查询query ②数据库修改update
  • 测试修改数据
    @RequestMapping("/updateUser")
    public String updateUser(){
        String sql= "UPDATE mybatis.user SET name='test_updateUser' WHERE id= 10";
        jdbcTemplate.update(sql);
        return "update success!";
    }
    

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

  • 测试删除数据
        @RequestMapping("/deleteUser")
        public String deleteUser(){
            String sql= "DELETE FROM mybatis.user where id=10";
            jdbcTemplate.update(sql);
            return "delete success!";
        }
    

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

  • 我们也可以实验一下sql中使用?作为占位符传递参数
        @RequestMapping("/updateUser/{id}")
        public String updateUser(@PathVariable("id") String id){
            String sql= "UPDATE mybatis.user SET name=?,pwd=? WHERE id="+id;
            Object[] o = new Object[2];
            o[0] = "zzzzzzz";
            o[1] = "aaaaaaaaa";
            jdbcTemplate.update(sql,o);
            return "update success!";
        }
    

在这里插入图片描述

  • 测试
    在这里插入图片描述
    在这里插入图片描述

3.数据源切换

  • 本来市面上就有很多开源的数据源可供我们使用,虽然springBoot为我们自动配置了hikari数据源,但是我们也是可以通过application进行更改要使用的数据源的
  • 怎么改?看源码,直接去找DataSourceProperties
    在这里插入图片描述
  • 所以我们在application中修改数据源的方法为spring.datasource.type,其实可以直接去配置文件application中通过联想功能找到对应的设置
    在这里插入图片描述

4.小结

  • 从springBoot封装的数据源的使用我们可以发现,使用springBoot封装的数据源的简洁程度已经达到了直接使用mybatis实现数据库操作相似的程度,这也是因为别人为我们封装的操作很好,我们使用起来就很简单
    在这里插入图片描述
  • 所以在不使用mybatis的情况下直接使用springBoot提供的数据源来操 作数据库是很简单的,甚至连service层我们都不需要,直接将所有的操作都写在controller层,但是这样也就污染了controller,它混入了sql操作,逻辑实现;但是好处就是简单,易使用和实现功能
  • 使用springBoot的数据源的时候我们可以直接在application中直接更换数据源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值