写在前面

鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的博文初步都定下来包括SpringBoot介绍、入门、配置、日志相关、web开发、数据访问、结合docker、缓存、消息队列、检索、任务安全、分布式等等一系列的博文,工作量很大,是个漫长的过程,每一步我都尽量详细,配上截图说明,也希望对看的同学真的有用。
单纯就是想分享技术博文,还想说一句就是,如果觉得有用,请点个关注、给个赞吧,也算对我来说是个宽慰,毕竟也得掉不少头发,嘿嘿嘿

系列文章传送条

详细SpringBoot教程之入门(一)
详细SpringBoot教程之入门(二)
详细SpringBoot教程之配置文件(一)
详细SpringBoot教程之配置文件(二)
详细SpringBoot教程之日志框架
详细SpringBoot教程之Web开发(一)
详细SpringBoot教程之Web开发(二)
详细SpringBoot教程之Web开发(三)
详细SpringBoot教程之数据访问
详细SpringBoot教程之启动配置原理
详细SpringBoot教程之缓存开发

SpringBoot与数据访问

对于数据访问层,无论是SQL还是NOSQL,SpringBoot默认采用整合 Spring Data的方式进行统一处理,添加大量自动配置,屏蔽了很多设置。在这其中,SpringBoot引入各种xxxTemplate,xxxRepository来简化我们对数据访问层的操作(使用SpringBoot的JPA方式,非常方便,后面会进行讲解)。对我们来说只需要进行简单的设置即可。我们将在数据访问章节测试使用SQL相关。接下来我们将讲解SpringBoot使用如下三个数据访问方式

  • JDBC
  • MyBatis
  • JPA

SpringBoot中使用JDBC

其实JDBC算是比较原始的数据库访问方式了,但不得不说,很多东西都是基于它进行封装的,而且还有非常多的项目喜欢使用JDBC,所以我们学习的时候,还是需要对JDBC相关进行了解,但是这里我们部队JDBC的原理进行讲解,因为已经超过了本博文的范畴了,所以我们这里只讲怎么使用,在SpringBoot中使用JDBC非常简单。这里我们使用Idea向导创建一个新项目,在勾选依赖的时候,除了照常勾选web模块之外,我们把mysql Dirver和JDBC勾选上

创建项目之后的pom.xml包下的内容像下面这样,当然你也可以创建Maven项目,然后按照这个引入相关依赖

项目创建成功之后,我们怎么使用呢?非常简单,我们只需要在主配置文件中进行一些相关的配置就可以了,比如说数据库账号密码之后的,这里要说的是我们使用的是mysql关系型数据库,如下

我们可以在测试类中编写下面的代码进行测试,看一下是否连接成功,没有连接成功的话就会报错,正常运行就是连接成功。

这里我们可以看到控制台输出日志,我们可以知道,SpringBoot默认使用的是class com.zaxxer.hikari.HikariDataSource作为数据源,而数据源的相关配置都在DataSourceProperties里面。

创建数据库的表,我们可以通过SpringBoot帮我们自动创建,如果我们直接在resources下创建sql且不进行任何配置文件中配置的话,我们就需要将sql进行特定的命名,才会生效,当然我们一般都会在主配置文件中进行配置的,如下

schema-*.sql、data-*.sql
默认规则:schema.sql,schema-all.sql;
可以使用   schema:- classpath:department.sql指定位置

自动配置原理

首先按照惯例,还是找到jdbc的自动配置类,然后通过查阅自动配置类进行分析,而jdbc的自动配置类就是org.springframework.boot.autoconfigure.jdbc

我们可以参考DataSourceConfiguration,根据配置创建数据源,默认使用hikari连接池,其中可以使用spring.datasource.type指定自定义的数据源类型。

这里要提一下,SpringBoot默认可以支持的数据源如下,以前的SpringBoot1.x中,默认使用的是tomcat数据源,而在2.x版本中使用的是Hikari作为数据源

  • org.apache.tomcat.jdbc.pool.DataSource
  • HikariDataSource
  • BasicDataSource

当然,既然有默认的数据源,我们当然可以进行自定义数据源类型

/*** Generic DataSource configuration.*/
@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type")
static class Generic {@Beanpublic DataSource dataSource(DataSourceProperties properties) {//使用DataSourceBuilder创建数据源,利用反射创建响应type的数据源,并且绑定相关属性return properties.initializeDataSourceBuilder().build();}}

整合Druid数据源

SpringBoot的数据源的话,其实我这里推荐使用2.x默认的Hikari数据源,因为速度快等等优点,具体啥优点可以自己去网上查找,但是这里为了演示,我就演示怎么切换阿里的Druid数据源(Druid数据源用的也挺多的,生态不错,不过感觉停更很久了)

首先在项目中导入druid数据源,然后自己在config目录下创建一个专门用来控制druid的配置类,配置类的测试内容如下,在里面我配置了过滤器和监听器作为示例


@Configuration
public class DruidConfig {@ConfigurationProperties(prefix = "spring.datasource")@Beanpublic DataSource druid(){return  new DruidDataSource();}//配置Druid的监控//1、配置一个管理后台的Servlet@Beanpublic ServletRegistrationBean statViewServlet(){ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");Map<String,String> initParams = new HashMap<>();initParams.put("loginUsername","admin");initParams.put("loginPassword","123456");initParams.put("allow","");//默认就是允许所有访问initParams.put("deny","192.168.15.21");bean.setInitParameters(initParams);return bean;}//2、配置一个web监控的filter@Beanpublic FilterRegistrationBean webStatFilter(){FilterRegistrationBean bean = new FilterRegistrationBean();bean.setFilter(new WebStatFilter());Map<String,String> initParams = new HashMap<>();initParams.put("exclusions","*.js,*.css,/druid/*");bean.setInitParameters(initParams);bean.setUrlPatterns(Arrays.asList("/*"));return  bean;}
}

SpringBoot整合MyBatis

第一步当然是先导入MyBatis的依赖,依赖如下

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.1</version>
</dependency>

使用步骤:

  • 配置数据源相关属性
  • 给数据库建表
  • 创建JavaBean

如何使用注解使用Mybatis

首先在src下创建一个mapper包,然后包下创建对应实体的mapper接口,像下面这样

//指定这是一个操作数据库的mapper
@Mapper
public interface DepartmentMapper {@Select("select * from department where id=#{id}")public Department getDeptById(Integer id);@Delete("delete from department where id=#{id}")public int deleteDeptById(Integer id);@Options(useGeneratedKeys = true,keyProperty = "id")@Insert("insert into department(departmentName) values(#{departmentName})")public int insertDept(Department department);@Update("update department set departmentName=#{departmentName} where id=#{id}")public int updateDept(Department department);
}

然后我们只需要通过对应的配置文件,就可以使用,因为SpringBoot有着自定义MyBatis的配置规则,给容器中添加一个ConfigurationCustomizer,使用MapperScan批量扫描所有的Mapper接口。

@org.springframework.context.annotation.Configuration
public class MyBatisConfig {@Beanpublic ConfigurationCustomizer configurationCustomizer(){return new ConfigurationCustomizer(){@Overridepublic void customize(Configuration configuration) {configuration.setMapUnderscoreToCamelCase(true);}};}
}
@MapperScan(value = "com.atguigu.springboot.mapper")
@SpringBootApplication
public class SpringBoot06DataMybatisApplication {public static void main(String[] args) {SpringApplication.run(SpringBoot06DataMybatisApplication.class, args);}
}

使用配置文件

mybatis:config-location: classpath:mybatis/mybatis-config.xml 指定全局配置文件的位置mapper-locations: classpath:mybatis/mapper/*.xml  指定sql映射文件的位置

更多使用参照Mybatis的对SpringBoot的官方文档

SpringBoot整合SpringData JPA

SpringData为我们提供使用统一的API来对数据访问层进行操作;这主要是Spring Data Commons项目来实现的。Spring Data Commons让我们在使用关系型或者非关系型数据访问 技术时都基于Spring提供的统一标准,标准包含了CRUD(创建、获取、更新、删除)、查询、 排序和分页的相关操作。

而且SpringDataJPA有着统一的Repository接口如Repository<T, ID extends Serializable>统一接口、 RevisionRepository<T, ID extends Serializable, N extends Number & Comparable>基于乐观 锁机制、CrudRepository<T, ID extends Serializable>基本CRUD操作、PagingAndSortingRepository<T, ID extends Serializable>:基本CRUD及分页

整合SpringData JPA

还是老样子,先引入我们的依赖,引入依赖之后,和原先的数据访问方式不同的是,我们可以编写一个实体类(bean)和数据表进行映射,并且配置好映射关系;

//使用JPA注解配置映射关系
@Entity //告诉JPA这是一个实体类(和数据表映射的类)
@Table(name = "tbl_user") //@Table来指定和哪个数据表对应;如果省略默认表名就是user;
public class User {@Id //这是一个主键@GeneratedValue(strategy = GenerationType.IDENTITY)//自增主键private Integer id;@Column(name = "last_name",length = 50) //这是和数据表对应的一个列private String lastName;@Column //省略默认列名就是属性名private String email;

创建好实体类并配置好映射关系之后,我们接着编写一个Dao接口来操作实体类对应的数据表(Repository)

//继承JpaRepository来完成对数据库的操作
public interface UserRepository extends JpaRepository<User,Integer> {}

注意了,我们jpa默认使用的hibernate,所以我们可以在配置文件中进行如下基本的配置

spring:  jpa:hibernate:
#     更新或者创建数据表结构ddl-auto: update
#    控制台显示SQLshow-sql: true

下一篇

这里我们大致介绍了SpringBoot的数据访问方式,带大家了解了一些基本的操作,更具体的还需要对相关数据访问方式进行学习,下一篇博文我们将讲解SpringBoot的启动原理。

详细SpringBoot教程之数据访问相关推荐

  1. 详细SpringBoot教程之入门(一)

    写在前面 鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的 ...

  2. 详细SpringBoot教程之配置文件(一)

    写在前面 鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的 ...

  3. 详细SpringBoot教程之缓存开发

    写在前面 这一系列的博文初步都定下来包括SpringBoot介绍.入门.配置.日志相关.web开发.数据访问.结合docker.缓存.消息队列.检索.任务安全.分布式等等一系列的博文,工作量很大,是个 ...

  4. 详细SpringBoot教程之日志框架

    写在前面 鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的 ...

  5. SpringBoot实战系列——数据访问=(Mybatis+Redis)

    前言 在开发中我们通常会对数据库的数据进行操作,SpringBoot对关系性和非关系型数据库的访问操作都提供了非常好的整合支持.SpringData是spring提供的一个用于简化数据库访问.支持云服 ...

  6. 小姐姐的详细SpringBoot教程之入门 连接Mysql、Druid数据源和整合MyBatis(三)

    文章目录 1.整合JDBC使用 1.创建项目 2.打开项目 3.使用我们的Idea连接我们的mysql数据库 1. 5.最后,测试是否可以查询数据 6. 最后简单的实现增删改查 2.整合Druid数据 ...

  7. SpringBoot使用Redis 数据访问(单点、集群、哨兵、连接池、Pipline、分布式框架Redisson、解决方案)

    目录 Redis 文献资料 用Redis编程 Redis模块API 教程和常见问题解答 管理 嵌入式和物联网 故障排除 Redis集群 其他基于Redis的分布式系统 在SSD和永久性存储器上进行Re ...

  8. SpringBoot_数据访问-简介

    SpringBoot与数据访问,SpringBoot如何与关系型数据进行交互,我们将会使用JDBC技术,包括持久层框架Mybatis,以及Spring Data JPA,这三个都是和关系型数据库进行交 ...

  9. Scott Mitchell 的ASP.NET 2.0数据教程之一: 创建一个数据访问层

    原文 | 下载本教程中的编码例子 | 下载本教程的英文PDF版 导言 作为web开发人员,我们的生活围绕着数据操作.我们建立数据库来存储数据,写编码来访问和修改数据,设计网页来采集和汇总数据.本文是研 ...

最新文章

  1. 近期Freecodecamp问题总结
  2. LAMP:用yum安装
  3. 工业机器人行业研究报告
  4. (转载)浅析Hadoop文件格式
  5. IP协议详解之子网寻址、子网掩码、构造超网
  6. DL:听着歌曲《成都》三分钟看遍主流的深度学习的神经网络的发展框架(1950~2018)
  7. 安卓开发之Intent系统调用系统相机Camera(中软杯项目)
  8. 2篇CIKM详解阿里妈妈搜索广告CTR模型如何低碳瘦身
  9. 【无码专区13】最小公倍数(线段树)
  10. 数据结构探险系列—栈篇-学习笔记
  11. oracle的redolog停止,Oracle Redo Log日志故障处理一则
  12. CSblog的学习记录
  13. XSLT Transform
  14. python grep awk_文本处理三剑客:grep、sed和awk命令介绍
  15. 多媒体视频技术:视频基础、视频格式、视频应用
  16. html网上日记本设计,个人博客的设计_网上日记本的开发ASP334
  17. python如何实现飞机上下移动_飞机大战正确方法,利用Python开发一个全自动版来实现自动打飞机...
  18. 网络编程 3 tcp通信
  19. 物联网平台搭建的全过程介绍(五)——基于阿里云物联网平台的Android聊天app源码
  20. 【渝粤题库】广东开放大学 基础会计 形成性考核

热门文章

  1. 4.操作卡片和OBU的指令以及流程
  2. 项目管理之需求变更:化解程序员的“头号噩梦”
  3. App抓包数据包之Paros的安装及使用
  4. .net开源cms系统推荐
  5. meb备份mysql_恢复使用MEB备份的MySQL数据库
  6. 数据空间变换——栅格影像值域映射到0-255范围
  7. 历史天气查询 Android 版本 JAVA
  8. Unseen Westeros:权力的游戏展览
  9. 川渝交界处今晨发生5级地震
  10. markdown文件的常用编写语法(图文并茂)