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

posted @ 2020-05-31 19:56  emdzz  阅读(351)  评论(0编辑  收藏  举报