[SpringBoot-11]SpringBoot整合JDBC

1、SpringData

  对于数据访问层,无论是 SQL(关系型数据库) 还是 NOSQL(非关系型数据库),Spring Boot 底层都是采用 Spring Data 的方式进行统一处理。Spring Data 也是 Spring 中与 Spring Boot、Spring Cloud 等齐名的知名项目。
  Sping Data 官网:https://spring.io/projects/spring-data
  数据库相关的启动器可以参考官方文档:https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/htmlsingle/#using-boot-starter

2、整合JDBC

  创建工程的时候选用Spring初始化器来创建:
在这里插入图片描述
  引入相应的模块:
在这里插入图片描述
  选中这几个模块其实就是pom.xml中导入相应的依赖:
在这里插入图片描述
  工程建立后,只需要在配置文件中编写数据库相关信息即可使用,application.yaml:

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/db1?serverTimezone=UTC
    driver-class-name: com.mysql.jdbc.Driver

  测试类测试:

@SpringBootTest
class SpringbootMyDataJdbcApplicationTests {

    @Autowired
    DataSource dataSource;

    @Test
    void contextLoads() throws Exception {
        System.out.println("类别:"+dataSource.getClass());
        Connection connection = dataSource.getConnection();
        System.out.println("connection:"+connection);
        connection.close();
    }
}

  控制台输出:
在这里插入图片描述
  可以看出使用的数据源是com.zaxxer.hikari.HikariDataSource

3、源码分析

  在spring-boot-autoconfigure包中,有数据源相关的配置类:
在这里插入图片描述
  在DataSourceAutoConfiguration中,有一个数据源配置的内部类:
在这里插入图片描述
  可以看出SpringBoot支持HikariTomcatDbcp2Generic数据源,这些数据源配置都在DataSourceConfiguration类里面,里面有每个数据源组件的定义:
  Tomcat数据源:

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(org.apache.tomcat.jdbc.pool.DataSource.class)
@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type", havingValue = "org.apache.tomcat.jdbc.pool.DataSource", matchIfMissing = true)
static class Tomcat {

	@Bean
	@ConfigurationProperties(prefix = "spring.datasource.tomcat")
	org.apache.tomcat.jdbc.pool.DataSource dataSource(DataSourceProperties properties) {
		org.apache.tomcat.jdbc.pool.DataSource dataSource = createDataSource(properties, org.apache.tomcat.jdbc.pool.DataSource.class);
		DatabaseDriver databaseDriver = DatabaseDriver.fromJdbcUrl(properties.determineUrl());
		String validationQuery = databaseDriver.getValidationQuery();
		if (validationQuery != null) {
			dataSource.setTestOnBorrow(true);
			dataSource.setValidationQuery(validationQuery);
		}
		return dataSource;
	}

}

  Hikari数据源:

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(HikariDataSource.class)
@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.zaxxer.hikari.HikariDataSource", matchIfMissing = true)
static class Hikari {

	@Bean
	@ConfigurationProperties(prefix = "spring.datasource.hikari")
	HikariDataSource dataSource(DataSourceProperties properties) {
		HikariDataSource dataSource = createDataSource(properties, HikariDataSource.class);
		if (StringUtils.hasText(properties.getName())) {
			dataSource.setPoolName(properties.getName());
		}
		return dataSource;
	}
}

  Dbcp2数据源:

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(org.apache.commons.dbcp2.BasicDataSource.class)
@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type", havingValue = "org.apache.commons.dbcp2.BasicDataSource", matchIfMissing = true)
static class Dbcp2 {

	@Bean
	@ConfigurationProperties(prefix = "spring.datasource.dbcp2")
	org.apache.commons.dbcp2.BasicDataSource dataSource(DataSourceProperties properties) {
		return createDataSource(properties, org.apache.commons.dbcp2.BasicDataSource.class);
	}
}

  Generic数据源:

@Configuration(proxyBeanMethods = false)
@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type")
static class Generic {

	@Bean
	DataSource dataSource(DataSourceProperties properties) {
		return properties.initializeDataSourceBuilder().build();
	}
}

  SpringBoot默认是使用com.zaxxer.hikari.HikariDataSource数据源,因为上面这些数据源组件中,只有Hikari的Bean注册条件完全达到。
在这里插入图片描述
  Tomcat缺少org.apache.tomcat.jdbc.pool.DataSource.class,Dbcp2缺少org.apache.commons.dbcp2.BasicDataSource.class,而Generic是在没有DataSource.class的前提下才会注册到IOC中,因此默认数据源为Hikari。
  如果我们要切换数据源,先导入相关驱动包,然后在配置文件中设置spring.datasource.type属性值即可。

4、JDBCTemplate

4.1 说明

  有了数据源(com.zaxxer.hikari.HikariDataSource),然后可以拿到数据库连接(java.sql.Connection),有了连接,就可以使用原生的 JDBC 语句来操作数据库;
  即使不使用第三方第数据库操作框架,如 MyBatis等,Spring 本身也对原生的JDBC 做了轻量级的封装,即JdbcTemplate
  数据库操作的所有 CRUD 方法都在 JdbcTemplate 中。Spring Boot 不仅提供了默认的数据源,同时默认已经配置好了 JdbcTemplate 放在了容器中,程序员只需自己注入即可使用
  JdbcTemplate 的自动配置是依赖 org.springframework.boot.autoconfigure.jdbc 包下的 JdbcTemplateConfiguration 类。

4.2 使用

  JdbcTemplate主要提供以下几类方法:
  1、execute:可以用于执行任何SQL语句,一般用于执行DDL语句;
  2、updatebatchUpdate:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
  3、queryqueryForXXX:用于执行查询相关语句;
  4、call:用于执行存储过程、函数相关语句。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值