Spring Boot - 使用Spring Data JDBC

简介:

Spring Data JDBC Extensions是Spring Data项目的一部分。Spring Framework中的JDBC支持非常广泛,涵盖了最常用的功能。此扩展项目为使用高级Oracle数据库功能提供了额外的支持。

配置:

pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.29</version>
</dependency>

application.yml:

1
2
3
4
5
6
7
8
9
spring:
datasource:
platform: mysql
name: world_x
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/world_x?useUnicode=true&characterEncoding=utf-8&useSSL=false
password: root
username: root

数据源配置:

springdata-jdbc默认是用org.apache.tomcat.jdbc.pool.DataSource作为数据源;

数据源的相关配置都在DataSourceConfiguration里面:

1
org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration

SpringBoot支持以下三种数据源:

1
2
3
org.apache.tomcat.jdbc.pool.DataSource
HikariDataSource
BasicDataSource

自定义数据源:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* Generic DataSource configuration.
*/
@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type")
static class Generic {

@Bean
public DataSource dataSource(DataSourceProperties properties) {
//使用DataSourceBuilder创建数据源,利用反射创建响应type的数据源,并且绑定相关属性
return properties.initializeDataSourceBuilder().build();
}

}

自动配置原理:

源码路径:`org.springframework.boot.autoconfigure.jdbc;

源码片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package org.springframework.boot.autoconfigure.jdbc;

@Configuration
@ConditionalOnClass({ DataSource.class, JdbcTemplate.class })
@ConditionalOnSingleCandidate(DataSource.class)
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class JdbcTemplateAutoConfiguration {

private final DataSource dataSource;

public JdbcTemplateAutoConfiguration(DataSource dataSource) {
this.dataSource = dataSource;
}

@Bean
@Primary
@ConditionalOnMissingBean(JdbcOperations.class)
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(this.dataSource);
}

@Bean
@Primary
@ConditionalOnMissingBean(NamedParameterJdbcOperations.class)
public NamedParameterJdbcTemplate namedParameterJdbcTemplate() {
return new NamedParameterJdbcTemplate(this.dataSource);
}
}

JdbcTemplateAutoConfiguration使用@AutoConfigureAfter注解导入DataSourceAutoConfiguration

开发:

JDBC模板:

Spring的JDBC框架承担了资源管理和异常处理的工作,从而简化了JDBC的代码,让我们只需要遍写从数据库读写数据的必须代码。Spring为JDBC提供了三个模板类供选择:

  1. JdbcTemplate: 最基本的SpringJDBC模板,这个模板支持最简单的JDBC数据库访问功能以及基于索引参数的查询。

  2. NamedParameterJdbcTemplate: 使用该模板类执行查询时可以将值以命名参数的形式绑定到SQL中,而不是使用简单的索引参数。

  3. SimpleJdbcTemplate: 该模板类利用Java5的一些特性来简化JDBC模板的使用。

从Spring3.1开始,SimpleJdbcTemplate已经被废弃了,特性被转入到JdbcTemplate中,NamedParameterJdbcTemplate只有在需要使用到命名参数的时候才需要使用到这个模板类,对于绝大多数的JDBC操作来讲,JdbcTemplate 就是最好的选择。

JDBCTemplate:

JdbcTemplate主要提供以下五类方法:

  1. execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
  2. update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
  3. query方法及queryForXXX方法:用于执行查询相关语句;
  4. call方法:用于执行存储过程、函数相关语句。
  5. batchUpdate方法:用于执行批处理相关语句;

注意:

这个项目好像被废弃了,Spring官网好像也没有提供文档。