对于数据访问层,无论是 SQL 还是 NoSQL,SpringBoot 默认采用整合 Spring Data 的方式进行统一处理,添加大量自动配置,屏蔽了很多设置。引入各种 xxxTemplate,xxxRepository 来简化我们对数据访问层的操作。对我们来说只需要进行简单的设置即可。

一、整合基本的 JDBC 与数据源


【1】引入 jdbc starter [spring-boot-starter-jdbc] 和 MySQL 驱动。

1 <dependency>
2 <groupId>org.springframework.boot</groupId>
3 <artifactId>spring-boot-starter-data-jdbc</artifactId>
4 </dependency>
5 <dependency>
6 <groupId>mysql</groupId>
7 <artifactId>mysql-connector-java</artifactId>
8 <scope>runtime</scope>
9 </dependency>

【2】在 application.yml 中配置数据源相关信息:

1 spring:
2 datasource:
3 username: root
4 password: 123
5 url: jdbc:mysql://127.0.0.1:3306/jdbc
6 driver-class-name: com.mysql.jdbc.Driver

【3】测试:默认使用的是 org.apache.tomcat.jdbc.pool.DataSource 作为数据源。数据源的相关配置都在 DataSourceProperties 里面。自动配置原理:org.springframework.boot.autoconfigure.jdbc 包中的 DataSourceConfiguration,根据配置创建数据源,默认使用 Tomcat 连接池;可以通过 spring.datasource.type 指定自定义数据源类型;SpringBoot 默认支持一下数据源:DataSource、HikariDataSource、BasicDataSource。用户也可以自定义数据源:如下可知是通过 build 创建数据源的。利用反射创建 type 类型的数据源,并绑定相关属性。

 1 @ConditionalOnMissingBean({DataSource.class})
2 @ConditionalOnProperty(
3 name = {"spring.datasource.type"}
4 )
5 static class Generic {
6 Generic() {
7 }
8 //通过 build 创建数据源的。利用反射创建 type 类型的数据源,并绑定相关属性。
9 @Bean
10 public DataSource dataSource(DataSourceProperties properties) {
11 return properties.initializeDataSourceBuilder().build();
12 }
13 }

【4】 第二个比较重要的类 DataSourceAutoConfiguration 自动配置类中的 dataSourceInitializer 继承了 ApplicationListener。

 1 public class DataSourceAutoConfiguration {
2 private static final Log logger = LogFactory.getLog(DataSourceAutoConfiguration.class);
3
4 public DataSourceAutoConfiguration() {
5 }
6
7 @Bean
8 @ConditionalOnMissingBean
9 public DataSourceInitializer dataSourceInitializer(DataSourceProperties properties, ApplicationContext applicationContext) {
10 return new DataSourceInitializer(properties, applicationContext);
11 }
12 //......
13 }
14
15 class DataSourceInitializer implements ApplicationListener<DataSourceInitializedEvent> {
16 //......
17 }

DataSourceInitializer 的两个主要作用:①、运行建表语句;②、运行操作数据的 sql语句;

 1 //运行建表语句
2 private void runSchemaScripts() {
3 List<Resource> scripts = this.getScripts("spring.datasource.schema", this.properties.getSchema(), "schema");
4 if(!scripts.isEmpty()) {
5 String username = this.properties.getSchemaUsername();
6 String password = this.properties.getSchemaPassword();
7 this.runScripts(scripts, username, password);
8
9 try {
10 this.applicationContext.publishEvent(new DataSourceInitializedEvent(this.dataSource));
11 if(!this.initialized) {
12 this.runDataScripts();
13 this.initialized = true;
14 }
15 } catch (IllegalStateException var5) {
16 logger.warn("Could not send event to complete DataSource initialization (" + var5.getMessage() + ")");
17 }
18 }
19
20 }
21 //运行操作数据的 sql语句
22 private void runDataScripts() {
23 List<Resource> scripts = this.getScripts("spring.datasource.data", this.properties.getData(), "data");
24 String username = this.properties.getDataUsername();
25 String password = this.properties.getDataPassword();
26 this.runScripts(scripts, username, password);
27 }

【5】进行数据表创建时,默认只需要将文件命名为:schema-*.sql;进行数据操作时,默认只需要将文件命令为:data-*.sql;如果自定义sql 文件时,可以在 application.yml 中通过如下方式指定sql文件位置:传入的是一个 list 列表

1 spring:
2 datasource:
3 schema:
4 - classpath: student.sql

【6】JdbcTemplateAutoConfiguration 自动配置类给容器中注入了 JdbcTemplate 组件,帮组我们操作数据库。

1 @AutoConfigureAfter({DataSourceAutoConfiguration.class})
2 public class JdbcTemplateAutoConfiguration {
3 @Bean
4 @Primary
5 @ConditionalOnMissingBean({JdbcOperations.class})
6 public JdbcTemplate jdbcTemplate() {
7 return new JdbcTemplate(this.dataSource);
8 }
9 }

【7】高级配置:使用 druid 数据源,首先需要引入依赖:

1 <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
2 <dependency>
3 <groupId>com.alibaba</groupId>
4 <artifactId>druid</artifactId>
5 <version>1.1.10</version>
6 </dependency>

【8】在 yml 配置文件中加入 Druid

1 spring:
2 datasource:
3 username: root
4 password: 123
5 url: jdbc:mysql://127.0.0.1:3306/jdbc
6 driver-class-name: com.mysql.jdbc.Driver
7 type: com.alibaba.druid.pool.DruidDataSource

二、整合 Mybatis 数据源(注解版)


【1】创建项目:选中 web、mybatis、mysql 和 jdbc 模块的 starts;在 pom.xml 中会发现 mybatis 与 springboot 的整合依赖:这个依赖并不是以 spring-boot 开始的,说明并不是 spring 提供的依赖,而是由第三方 mybatis 提供的依赖包;

1 <dependency>
2 <groupId>org.mybatis.spring.boot</groupId>
3 <artifactId>mybatis-spring-boot-starter</artifactId>
4 <version>2.1.1</version>
5 </dependency>

【2】定义个接口类,用来操作目标表的增删改查:通过 @Mapper 表示该接口类是一个 Mybatis 的 Mapper 类,通过增删改查注解 @Select @Update @Insert @Delete 对数据表进行操作;

1 //指定这是一个操作数据库的 mapper
2 @Mapper
3 public interface DepartmentMapper {
4
5 @Select("select * from department where id=#{id}")
6 public Department getDeptById(Integer id);
7 }

【3】通过 Controller 层调用 Server 继而调用 Mapper 对数据完成操作:

 1 @Controller
2 public class DepartmentController {
3
4 @Autowired
5 private DepartmentMapper mapper;
6
7 @GetMapping("/dept/{id}")
8 public Department getDeptById(@PathVariable("id") Integer id){
9 return mapper.getDeptById(id);
10 }
11 }

SpringBoot——数据访问的更多相关文章

  1. SpringBoot数据访问之Druid启动器的使用

    数据访问之Druid启动器的使用 承接上文:SpringBoot数据访问之Druid数据源的自定义使用 官方文档: Druid Spring Boot Starter 首先在在 Spring Boot ...

  2. SpringBoot数据访问之整合mybatis注解版

    SpringBoot数据访问之整合mybatis注解版 mybatis注解版: 贴心链接:Github 在网页下方,找到快速开始文档 上述链接方便读者查找. 通过快速开始文档,搭建环境: 创建数据库: ...

  3. Springboot数据访问,棒棒哒!

    Springboot对数据访问部分提供了非常强大的集成,支持mysql,oracle等传统数据库的同时,也支持Redis,MongoDB等非关系型数据库,极大的简化了DAO的代码,尤其是Spring ...

  4. springboot 数据访问【转】【补】

    六.SpringBoot与数据访问 1.JDBC pom.xml配置 <dependencies> <dependency> <groupId>org.spring ...

  5. SpringBoot数据访问(一) SpringBoot整合Mybatis

    前言 SpringData是Spring提供的一个用于简化数据库访问.支持云服务的开源框架.它是一个伞形项目,包含了大量关系型数据库及非关系型数据库的数据访问解决方案,其设计目的是为了使我们可以快速且 ...

  6. SpringBoot数据访问(二) SpringBoot整合JPA

    JPA简介 Spring Data JPA是Spring Data大家族的一部分,它可以轻松实现基于JPA的存储库.该模块用于增强支持基于JPA的数据访问层,它使我们可以更加容易地构建使用数据访问技术 ...

  7. SpringBoot数据访问之Druid数据源的使用

    数据访问之Druid数据源的使用 说明:该数据源Druid,使用自定义方式实现,后面文章使用start启动器实现,学习思路为主. 为什么要使用数据源: ​ 数据源是提高数据库连接性能的常规手段,数据源 ...

  8. SpringBoot数据访问之整合Mybatis配置文件

    环境搭建以及前置知识回顾 SpringBoot中有两种start的形式: 官方:spring-boot-starter-* 第三方:*-spring-boot-starter Mybatis属于第三方 ...

  9. SpringBoot数据访问(三) SpringBoot整合Redis

    前言 除了对关系型数据库的整合支持外,SpringBoot对非关系型数据库也提供了非常好的支持,比如,对Redis的支持. Redis(Remote Dictionary Server,即远程字典服务 ...

  10. 【串线篇】SpringBoot数据访问【数据源/mybatis/指定映射文件位置】

    一.配置数据源 1.1.jdbc版本 JDBC(.tomcat.jdbc.pool.DataSource作为数据源) <?xml version="1.0" encoding ...

随机推荐

  1. 06 Spark SQL 及其DataFrame的基本操作

    1.Spark SQL出现的 原因是什么? Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个叫作Data Frame的编程抽象结构数据模型(即带有Schema信息的RDD),S ...

  2. 解决idea中按退格键(Backspace)回到上一行问题

    开始学习java时,第一次用idea,该问题困扰一上午,网上也没有解决方案,最后自己摸索如下.打开File-> Settings->Editor->Smart Keys,将To pr ...

  3. 【NumPy】Python将数组中低于一定百分比的值替换

    情景举例 现有一个一维数组(或二维进行遍历)存放着很多,找到低于中位数20%的值并将小于该值的数全部替换为该值. 涉及方法 np.median(data, axis=0)用于计算数组中元素的中位数(中 ...

  4. 西瓜书3.4 解题报告(python 多分类学习 十折交叉法)

    偷懒找了UCI上最小的一个数据集,数据大约是集装箱起重机的转动速度.角度,判断其力量大小(我不懂起重机啊啊啊) 虽然不懂但并不妨碍写代码分类,显然标记就是力量,分为0.3.0.5.0.7三种.具体的模 ...

  5. 「AutoCAD2022」

    「AutoCAD2022」https://www.aliyundrive.com/s/rxktpNqtHC5点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速 ...

  6. QT动态库的创建和使用

    QT动态库的创建和使用 步骤一: 创建一个库文件 Library 步骤二:进行动态库封装方法的实现 注意事项:要注意共享类均需要包含导出的宏定义 这个宏定义和导出向导的宏定义一致 宏定义: 向导文件: ...

  7. 01背包&完全背包二维写法的对比,进而理解一维优化后的正逆序

    01背包题解 完全背包题解 二维写法时两种背包问题核心代码的区别: 可以看出,01背包用的是上一层的数据,完全背包用的是当前层的数据 所以优化为一维时, 01背包需逆序 for (int i = 1; ...

  8. k8s 部署单点 rabbitmq

    创建pvc vim rabbitmq-pvc.yaml kind: PersistentVolumeClaim apiVersion: v1 metadata: name: rabbitmq-data ...

  9. P2212 Watering the Fields S

    题目描述 给定n个点,第i个点的坐标为(xi,yi)(xi​,yi​),如果想连通第i个点与第j个点,需要耗费的代价为两点的距离.第i个点与第j个点之间的距离使用欧几里得距离进行计算,即:(xi-xj ...

  10. 6vue分支循环

    分支v-if <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...