Spring Boot与数据访问一–Spring Data介绍
Spring Boot与数据访问二–使用原生JDBC及源码解析
Spring Boot与数据访问三–整合Druid
Spring Boot与数据访问四–整合MyBatis(注解版)
Spring Boot与数据访问五–整合MyBatis(配置版)
Spring Boot与数据访问六–整合JPA
一、整合基本JDBC与数据源
1、引入starter
spring-boot-starter-jdbc
创建新的项目:
- Group:项目组织的唯一标识符,通常分为多个段,自己使用随便设置即可
这里介绍两段的用法:第一段为域,第二段为公司名称
域又分为org、com、cn等,其中org为非营利组织,com为商业组织,cn表示中国
例如apache公司的tomcat项目:org.apache.tomcat
Group是org.apache
域是org(tomcat是非营利项目
公司名称是apache
Artifact是tomcat - Artifact:项目的唯一的标识符,就是项目的名称,注意只能全小写,不能存在大写字母
Grounp+Artifact就相当于项目的坐标,保证了项目的唯一性 - Name:默认同Artifact,声明了一个对于用户更为友好的项目名称,不是必须的
- Description:项目描述
- Package:指定main目录里java下的包名称,默认为Group+Artifact
- Packaging:打包方式,可选项:war,jar,在pom文件中可以随意修改
- Version:指定了项目的当前版本,SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本
2、配置application.yml或者application.properties
3、测试
二、数据源的相关配置
数据源的相关配置都在org.springframework.boot.autoconfigure.jdbc.DataSourceProperties里面:
三、自动配置原理
1、参考DataSourceConfiguration,根据配置创建数据源,默认使用hikari连接池,可以使用spring.datasource.type指定自定义的数据源类型。
2、SpringBoot默认可以支持:
- oracle.ucp.jdbc.PoolDataSource
- org.apache.commons.dbcp2.BasicDataSource
- com.zaxxer.hikari.HikariDataSource
- org.apache.tomcat.jdbc.pool.DataSource
3、自定义数据源类型
@Configuration(
proxyBeanMethods = false
)
@ConditionalOnMissingBean({DataSource.class})
@ConditionalOnProperty(
name = {"spring.datasource.type"}
)
static class Generic {
Generic() {
}
@Bean
DataSource dataSource(DataSourceProperties properties) {
// 使用DataSourceBuilder创建数据源,利用反射创建相应type的数据源,并且绑定相关属性
return properties.initializeDataSourceBuilder().build();
}
}
注:上面这段代码在org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration的第31行
4、初始化数据库
在org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer文件里面。
spring.datasource
下有两个属性 schme、data,其中schema为表初始化语句,data为数据初始化,默认加载schema.sql
与data.sql
。脚本位置可以通过spring.datasource.schema
与spring.datasource.data
来改变,源码如下:
看getScripts源码,它还会加载schema-${platform}.sql
文件,或者data-${platform}.sql
文件,其中platform就是spring.datasource.platform的值
默认只需要将文件命名为:schema-*.sql
、data-*.sql
创建schema-all.sql文件开始测试,启动程序后发现MySQL中tbl_user表并没有创建成功
DataSourceInitializationMode初始化模式(springboot2.0),其中有三个值,always为始终执行初始化,embedded只初始化内存数据库(默认值),如h2等,never为不执行初始化。只要两个条件符合就执行,看起来是通过配置文件获取的,所以配置文件中需要添加(1.5版本的时候还没有该配置)initialization-mode: always
重新启动程序再看MySQL库中该表已创建成功并有数据
使用自己定义的文件名称,注意:不能写成classpath: tbl_user.sql
,中间不能有空格,否则识别不了。
5、操作数据库:自动配置了JdbcTemplate操作数据库
创建相应的Controller来测试一下