对于数据访问层,无论是 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. c++ thread, 模板类,锁的调用实例

    #include<thread> #include<condition_variable> #include<mutex> #include<queue> ...

  2. PHP Redis - 事务

    Redis 事务可以一次执行多个命令, 并有两个重要的保证: ① 事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断. ② ...

  3. react+antd pro实现【列表可实时行内编辑】的弹窗表单组件

    纯列表版效果展示: ① 初始无值,展示为唤醒按钮+文案外链 ②点击按钮唤醒弹窗(简易版示意图) ③配置后 可编辑表格组件文档: https://procomponents.ant.design/com ...

  4. C# core 流、字节、字符串相互转换

    /// <summary> /// 将 Stream 转成 byte[] /// </summary> public byte[] StreamToBytes(Stream s ...

  5. vue npm安装指令汇总

    1.elmentui:npm i element-ui -S 2.打印插件:npm install vue-print-nb --save 3.时间转换插件Moment:npm install mom ...

  6. redis面试题汇总

    1redis持久化机制 redis是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来保证数据持久化,当redis重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的目的 2缓 ...

  7. clamav测试用例 API

    最近接触到clamav这一块,本身是一个很简单的任务,只需要调用他的API对文件进行检测即可,但是在进行大量搜索发现,网上最多只有API的讲解,且质量层次不齐,这可为难住我了,作为一个名副其实的&qu ...

  8. WLAN - AP上线

    1 保证AC,AP互通2 AP上线capwap 1 AP组创建 2 管理域模板 3 AC组和管理域模板绑定 4 指定AC的接口 5 导入AP3 WALN的业务配置 1 安全模板 2 SSID 模板 3 ...

  9. vue3 技术浏览 收藏

    Vue3教程:Vue3.0 + Vant3.0 搭建种子项目 链接:https://www.cnblogs.com/han-1034683568/p/13875663.html

  10. 对css及css3的大致整理(查漏补缺)