Springboot笔记(6):Springboot数据访问

x33g5p2x  于2021-12-08 转载在 Spring  
字(3.7k)|赞(0)|评价(0)|浏览(457)

0、写在前面

笔记:06、数据访问 · 语雀

1、SQL

1.1、数据源的自动配置-HikariDataSource

1.1.1、导入JDBC场景

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

数据库驱动?

  为什么导入JDBC场景,官方不导入驱动?官方不知道我们接下要操作什么数据库,不同的数据库对应的数据库驱动不同。

数据库版本和驱动版本对应

我的数据库版本:5.7.20

版本仲裁:mysql驱动默认版本8.0.21

故需要将数据库版本5.7.20和驱动版本5.1.49 对应:

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

想要修改mysql驱动版本

1、直接依赖引入具体版本(maven的就近依赖原则)
<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.49</version>
 </dependency>
2、重新声明版本(maven的属性的就近优先原则)
<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
 </dependency>

    <properties>
        <java.version>1.8</java.version>
        <mysql.version>5.1.49</mysql.version>
    </properties>

1.1.2、分析自动配置

自动配置的类

  • DataSourceAutoConfiguration**:数据源的自动配置**

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

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

  • 底层配置好的连接池是:HikariDataSource

@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 {

	@Configuration(proxyBeanMethods = false)
	@Conditional(EmbeddedDatabaseCondition.class)
	@ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
	@Import(EmbeddedDataSourceConfiguration.class)
	protected static class EmbeddedDatabaseConfiguration {

	}

	@Configuration(proxyBeanMethods = false)
	@Conditional(PooledDataSourceCondition.class)
	@ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
	@Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class,
			DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.Generic.class,
			DataSourceJmxConfiguration.class })
	protected static class PooledDataSourceConfiguration {

	}

分析:

@ConditionalOnMissingBean(type = "io.r2dbc.spi.ConnectionFactory"):表示如果通过响应式编程的话就不使用DataSourceAutoConfiguration,如果不使用响应式编程就使用DataSourceAutoConfiguration配置。

@EnableConfigurationProperties(DataSourceProperties.class):表示开启事件绑定功能,在DataSourceProperties里绑定spring.datasource。

@ConditionalOnMissingBean({ DataSource.class, XADataSource.class }):表示如果自己没有中没有数据源,系统会自动配置。

**DataSourceProperties:spring.datasource**
@ConfigurationProperties(prefix = "spring.datasource")
public class DataSourceProperties implements BeanClassLoaderAware, InitializingBean {
     
	private String driverClassName;

	private String url;

	private String username;

	private String password;

	private String jndiName;
}
  • DataSourceTransactionManagerAutoConfiguration: 事务管理器的自动配置

  • JdbcTemplateAutoConfiguration: JdbcTemplate的自动配置,可以来对数据库进行crud

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

  • @Bean、@Primary JdbcTemplate;容器中有这个组件

  • JndiDataSourceAutoConfigurationjndi的自动配置

  • XADataSourceAutoConfiguration分布式事务相关的

1.1.3、修改配置项

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db_account
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

1.1.4、测试

@Slf4j
@SpringBootTest
class Boot05WebAdminApplicationTests {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Test
    void contextLoads() {

//        jdbcTemplate.queryForObject("select * from account_tbl")
//        jdbcTemplate.queryForList("select * from account_tbl",)
        Long aLong = jdbcTemplate.queryForObject("select count(*) from account_tbl", Long.class);
        log.info("记录总数:{}",aLong);
    }

}

2、

3、

相关文章