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模版实例操作

  • 相关阅读:
    stenciljs 学习四 组件装饰器
    stenciljs 学习三 组件生命周期
    stenciljs 学习二 pwa 简单应用开发
    stenciljs ionic 团队开发的方便web 组件框架
    stenciljs 学习一 web 组件开发
    使用npm init快速创建web 应用
    adnanh webhook 框架 hook rule
    adnanh webhook 框架 hook 定义
    adnanh webhook 框架request values 说明
    adnanh webhook 框架execute-command 以及参数传递处理
  • 原文地址:https://www.cnblogs.com/mindzone/p/13021061.html
Copyright © 2011-2022 走看看