SpringBoot数据访问

SQL

一、数据源的自动配置 HikariDataSource

1、导入jdbc使用场景

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>

为什么导入jdbc场景,官方不导入驱动呢?官方不知道我们要操作什么数据库。

 

数据库的版本和驱动的版本要对应;

2、导入mysql驱动

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>

若想要修改默认版本
1、直接依赖引入具体的版本(maven的就近原则)
2、重新声明版本
<properties>
<java.version>1.8</java.version>
<mysql.version>5.1.47</mysql.version>
</properties>
 
若未声明版本、则使用当前项目默认版本

 

2、分析自动配置

DataSourceAutoConfiguration.class:数据源自动配置

  修改数据源相关的配置:spring.datasource

  数据库连接池中的自动配置,是自己容器中没有DataSource才自动配置的;

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({DataSource.class,EmbeddedDatabaseType.class})
@ConditionalOnMissingBean(type = {"io.r2dbc.spi.ConnectionFactory"})
@EnableConfigurationProperties({DataSourceProperties.class})
@Import({DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class})
public class DataSourceAutoConfiguration {

DataSourceTransactionManagerAutoConfiguration.class:事务管理器的自动配置

JdbcTemplateAutoConfiguration.class:jdbcTemolate自动配置,可以对数据库进行curd

  这可以修改这个配置项:@ConfigurationProperties(prefix = "spring.jdbc")来修改jdbcTemplate

  @Bean @Primary JdbcTemplate jdbcTemplate:容器中有这个组件

    @Bean
    @Primary
    JdbcTemplate jdbcTemplate(DataSource dataSource, JdbcProperties properties) {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        Template template = properties.getTemplate();
        jdbcTemplate.setFetchSize(template.getFetchSize());
        jdbcTemplate.setMaxRows(template.getMaxRows());
        if (template.getQueryTimeout() != null) {
            jdbcTemplate.setQueryTimeout((int)template.getQueryTimeout().getSeconds());
        }

        return jdbcTemplate;
    }

还有很多自动配置文件、此处不过多描述。。。

 

3、修改数据源配置项

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/spring_boot_data?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver


//springboot 2.0中需要在url后添加 ?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8来避免报时区错误

测试代码

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Test
    void testJdbcTemplate() {
        Integer count = jdbcTemplate.queryForObject("select count(*) from user", Integer.class);
        System.out.println("记录总数:"+count);
    }

 

 

自定义数据源

@Configuration
public class MyDataSourceConfig {

    /**
     * 配置自定义数据源
     * @ConfigurationProperties("spring.datasource"):与配置文件中配置的属性一一对应
     */
    @Bean
    @ConfigurationProperties("spring.datasource")
    public DataSource dataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }

 

posted @ 2021-05-27 16:46  DHaiLin  阅读(70)  评论(0编辑  收藏  举报