zoukankan      html  css  js  c++  java
  • 【SpringBoot】13 数据访问P1 整合Jdbc

    SpringBoot与数据访问概述:

    对于数据访问层,无论是SQL还是NOSQL,Spring Boot默认采用整合Spring Data的方式进行统一处理,

    添加大量自动配置,屏蔽了很多设置。引入各种xxxTemplate,xxxRepository来简化我们对数据访问层的操作。

    对我们来说只需要进行简单的设置即可。

    我们将在数据访问章节测试使用SQL相关、NOSQL在缓存、消息、检索等章节测试。

    – JDBC

    – MyBatis

    – JPA

    另外非关系型数据库也是支持的,例如Redis

    SpringBoot整合JDBC

    创建一个SpringBoot工程

    这样命名

    然后点选预先整合一些依赖组件

    - Lombok简化工具

    - Jdbc API

    - MySQL Driver

    - Spring Web

    然后再POM配置中就可以查看到,就是这些依赖坐标

    坐标:

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>

    然后开始连接数据库【不是虚拟机或者服务主机的Linux,本地的数据库也可以】

    SpringBoot已经接管了一切,所以我们不需要再自己手动编写任何文件

    一切都在已有的配置中执行的

    可以选择properties配置,也可以是yaml配置

    这里写的是一个yaml配置,后缀名yml是yaml的缩写版

    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql:///mysql?serverTimezone=Asia/Shanghai
        username: root
        password: 123456

    properties配置

    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.url=jdbc:mysql:///mysql?serverTimezone=Asia/Shanghai
    spring.datasource.username=root
    spring.datasource.password=123456

    位置:

    另外,建议连接到在Linux上的数据库连接再附带一些参数

    jdbc:mysql:///mysql?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8

    再测试类中自动装配数据源对象【连接池】

        @Autowired
        DataSource dataSource;
        
        @Test
        void contextLoads() throws SQLException {
    
            System.out.println(dataSource.getClass());
            
            Connection connection = dataSource.getConnection();
    
            System.out.println(connection);
            
            connection.close();
        }

    测试结果

    class com.zaxxer.hikari.HikariDataSource
    2020-05-31 19:10:39.673  INFO 9500 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
    2020-05-31 19:10:41.200  INFO 9500 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
    HikariProxyConnection@1964117592 wrapping com.mysql.cj.jdbc.ConnectionImpl@48976e6d
    
    2020-05-31 19:10:41.235  INFO 9500 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
    2020-05-31 19:10:41.239  INFO 9500 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
    2020-05-31 19:10:41.241  INFO 9500 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
    
    Process finished with exit code 0

    所以SpringBoot默认的数据源是Hikari连接池

    如果是使用老版本的5.0+MySQL,则用的是tomcat提供的一个数据源

    关于数据源的相关配置都在DataSourceProperties里面:

    所在的依赖组件包是这个

    org.springframework.boot:spring-boot-autoconfigure

    然后下级目录位于:

    jdbc.*

    在这个数据源配置抽象类DataSourceConfiguration中找到了我们使用的数据源

    行号68开始

        @Configuration(
            proxyBeanMethods = false
        )
        @ConditionalOnClass({HikariDataSource.class})
        @ConditionalOnMissingBean({DataSource.class})
        @ConditionalOnProperty(
            name = {"spring.datasource.type"},
            havingValue = "com.zaxxer.hikari.HikariDataSource",
            matchIfMissing = true
        )
        static class Hikari {
            Hikari() {
            }
    
            @Bean
            @ConfigurationProperties(
                prefix = "spring.datasource.hikari"
            )
            HikariDataSource dataSource(DataSourceProperties properties) {
                HikariDataSource dataSource = (HikariDataSource)DataSourceConfiguration.createDataSource(properties, HikariDataSource.class);
                if (StringUtils.hasText(properties.getName())) {
                    dataSource.setPoolName(properties.getName());
                }
    
                return dataSource;
            }
        }

    默认是分了这四种

    SpringBoot按照你的配置来创建数据源实例,如果你不配置,

    SpringBoot会根据数据库的驱动默认给你这里面的一个

    这个配置使用这个属性完成:

    spring.datasource.type

    另外也可以配置自定义类型的数据源

    【就是我们第一个看到的Generic,泛型连接池】

        @Configuration(
            proxyBeanMethods = false
        )
        @ConditionalOnMissingBean({DataSource.class})
        @ConditionalOnProperty(
            name = {"spring.datasource.type"}
        )
        static class Generic {
            Generic() {
            }
    
            @Bean
            DataSource dataSource(DataSourceProperties properties) {
                // 使用的是这个DataSourceBuilder创建连接池实例
                return properties.initializeDataSourceBuilder().build();
            }
        }    

    这是Build方法的过程

    操作原生JDBC可以自己操作

    也可以使用Spring提供的JdbcTemplate模版实例操作

  • 相关阅读:
    循序渐进Linux 1:Linux的基本结构
    Django通过中间件实现登录验证demo
    Django中简单添加HTML、css、js等文件(非正规添加,适合小白)
    数据库之MySQL
    前端之JQuery
    核心编程之第一章正则表达式
    前端之JS
    python基础面试常见题
    前端之CSS
    前端之HTML
  • 原文地址:https://www.cnblogs.com/mindzone/p/13021061.html
Copyright © 2011-2022 走看看