[笔记迁移][Spring Boot]SQL数据访问[5]

1. 简介

  1. 对于DAO层,SQL or NoSQL,Spring Boot默认在底层使用 Spring Data 的方式进行统一处理,通过各种xxxTemplate,xxxRepository简化对DAO层的操作。
  2. 与DAO层有关的starter,使用spring-boot-starter-data-{数据交互产品}进行命名如spring-boot-starter-data-jdbc等。

2.整合原生JDBC(需要导入jdbc模块和对应数据库驱动模块)

2.1 简单配置(映射绑定的是DataSourceProperties)
spring:
 datasource:
  driver-class-name: com.mysql.jdbc.Driver
  username: root
  password: sysadmin
  url: jdbc:mysql://localhost:3306/mybatis

效果:默认使用 org.apache.tomcat.jdbc.pool.DataSource

@ConfigurationProperties(
    prefix = "spring.datasource"
)
public class DataSourceProperties implements BeanClassLoaderAware, EnvironmentAware, InitializingBean {
   
    private ClassLoader classLoader;
    private Environment environment;
    private String name = "testdb";
    private boolean generateUniqueName;
    private Class<? extends DataSource> type;
    private String driverClassName;
    private String url;
    private String username;
    private String password;
    private String jndiName;
    private boolean initialize = true;
    private String platform = "all";
    private List<String> schema;
    private String schemaUsername;
    private String schemaPassword;
    private List<String> data;
    private String dataUsername;
    private String dataPassword;
    private boolean continueOnError = false;
    private String separator = ";";
    private Charset sqlScriptEncoding;
    private EmbeddedDatabaseConnection embeddedDatabaseConnection;
    private DataSourceProperties.Xa xa;
    private String uniqueName;
    //... ...
    }
2.2. 数据源自动配置原理(相关类都在org.springframework.boot.autoconfigure.jdbc下)
  1. 参考DataSourceConfiguration,根据@ConditionalOnClass即导入的依赖情况和@ConditionalOnProperty(spring.datasource.type)来选择创建哪种数据源,默认使用Tomcat连接池。
    (1)Spring Boot默认支持:org.apache.tomcat.jdbc.pool.DataSource/HikariDataSource/BasicDataSource(dbcp和dbcp2)。
    (2)自定义数据源的原理

    @ConditionalOnMissingBean({
         DataSource.class})
    @ConditionalOnProperty(
        name = {
         "spring.datasource.type"}
    )
    static class Generic {
         
        Generic() {
         
        }
    
        @Bean
        public DataSource dataSource(DataSourceProperties properties) {
         
           	//建造者模式创建数据源,利用BeanUtil反射创建相应Type的数据源,并绑定相关属性
            return properties.initializeDataSourceBuilder().build();
        }
    }
    
  2. DataSourceAutoConfiguration向容器中添加了一个 DataSourceInitializer
    (implements ApplicationListener),其作用包括:
    (1) runSchemaScripts():应用启动时运行建表语句脚本,这些文件命名模式为schema-*.sql,默认为schema-all.sql。(注意,每次重启时都会删掉同名旧表创建新表。第二次启动前应该删掉这段配置。)

    private void runSchemaScripts() {
         
        List<Resource> scripts = this.getScripts("spring.datasource.schema", this.properties.getSchema(), "schema");
        if (!scripts.isEmpty()) {
         
            String username = this.properties.getSchemaUsername();
            String password = this.properties.getSchemaPassword();
            this.runScripts(scripts, username, password);
    
            try 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值