第三章:SpringBoot使用SpringDataJPA完成CRUD

前两章咱们简单讲解了SpringBoot的易用性,SpringBoot框架内部提供了不少咱们须要用到的组件,须要什么你就能够拿到项目里。
在咱们平时的项目中,数据的存储以及访问都是最为核心的关键部分,如今有不少企业采用主流的数据库,如关系型数据库:MySQL,oracle,sqlserver。非关系型数据库:redis,mongodb等。
SpringBoot已经为咱们提供了不少种的数据库来作数据存储以及读取,上面只是简单的几种,那么我接下来以MySQL为例来说述下本章的内容。java

本章目标

学习而且使用SpringBoot访问MySQL数据库,而且结合SpringDataJPA完成CRUD(Create,Read,Update,Delete)简单操做。mysql

构建项目

接下来咱们先来建立SpringBoot项目,以下图1所示:git


图1

点击Next输入一些项目参数,以下图2所示:web


图2

点击Next后选择咱们须要导入项目的SpringBoot组件,这里要注意必定要选择正确的组件,以下图3所示:redis


图3

能够看到图3咱们选择了,web,MySQL,JPA组件做为咱们开发必备组件,咱们点击Next输入项目名称后进入项目窗口,以下图4所示:spring


图4

咱们打开pom.xml能够看到springboot自动为咱们添加了spring-data-jpa、mysql-connector-java的支持,以下图5所示:sql


图5

上图的注释是我添加的,项目默认建立完成后是没有注释的。
注意:若是使用内部tomcat运行项目须要将spring-boot-starter-tomcat的scope标签注释掉。mongodb

配置数据源以及JPA

从此咱们修改application.properties文件配置为application.yml配置。.yml配置文件与.properties配置要更清晰更有层次感,能够很明了的看懂配置信息。
咱们在resources目录下建立application.yml文件,而且配置DataSource以及JPA,以下图6所示:数据库


图6

能够看到上述配置文件内,咱们使用了本地的一个mysql数据库,mysql数据库是咱们事先安装好的,而且建立了一个名叫test的数据库,JPA的配置了show-sql用来在控制台输出JPA自动生成的sql语句。
上述数据配置文件已经完成,接下来咱们新建数据库测试表结构我使用的数据库工具是Navicat大家可自行下载或者使用其余工具,结构以下图7所示:tomcat


图7

建立表语句我会放到resources目录下,请你们到文档地址下载对应课程源码。
接下来咱们开始编写springmvc控制器以及实体类,咱们采用@RestController注解来编写一个控制器,以下图8所示:


图8

建立实体

咱们根据数据库中的字段对应建立一个UserEntity来做为对应操做,以下图9所示:


图9

能够看到图9中咱们使用到了不少注解,关于注解的具体含义咱们放到下面章节中具体讲解。

建立JPA

既然实体类咱们也已经建立完成了,那么接下来咱们须要使用SpringDataJPA来完成数据库操做,咱们新建名字叫作jpa的package,而后建立UserJPA接口而且继承SpringDataJPA内的接口做为父类,以下图10所示:


图10

咱们UserJPA继承了JpaRepository接口(SpringDataJPA提供的简单数据操做接口)、JpaSpecificationExecutor(SpringDataJPA提供的复杂查询接口)、Serializable(序列化接口)。
咱们并不须要作其余的任何操做了,由于SpringBoot以及SpringDataJPA会为咱们所有搞定,SpringDataJPA内部使用了类代理的方式让继承了它接口的子接口都以spring管理的Bean的形式存在,也就是说咱们能够直接使用@Autowired注解在spring管理bean使用,以下图11所示:


图11

到这一步咱们的数据库层几乎已经编写完成了,那么咱们须要编写控制器让咱们经过页面能够访问到数据。

编写查询方法

咱们回到UserController中,而后建立一个查询用户列表的方法,以下图12所示:


图12

其中userJps.findAll()方法就是SpringDataJPA为咱们提供的内置方法,它能够查询表内全部的数据,除了findAll还有不少有用的方法,咱们后期使用一章的内容来详细介绍这个强大的家伙!

编写添加、更新方法


图13

能够看到上图13中,咱们只是简单的实现实体的持久化操做,userJPA.save方法能够执行添加也能够执行更新,若是须要执行持久化的实体存在主键值则更新数据,若是不存在则添加数据。

编写删除方法



图14

咱们删除完用户后直接返回了用户列表,能够查看到用户是否已经删除成功。

初尝试运行项目

具体如何运行项目请到LessonTwo去阅读,下面咱们能够看到项目是正常运行的以下图15所示:


图15

我红色标记的部分能够看到,springmvc加载了我定义的请求。那么咱们尝试访问用户列表路径:127.0.0.1:8080/user/list能够看到以下图16所示,由于咱们数据库中并无数据,因此咱们没有查询到结果:


图16

能够看下IntelliJ IDEA工具控制台输出的语句:
Hibernate: select userentity0_.t_id as t_id1_0_, userentity0_.t_address as t_addres2_0_, userentity0_.t_age as t_age3_0_, userentity0_.t_name as t_name4_0_ from t_user userentity0_
由于咱们没有设置格式化sql因此生成的sql语句都是一行显示的。

添加更新用户

咱们如今添加一条用户信息到数据库,请求地址:http://127.0.0.1:8080/user/save?name=admin&age=22&address=jinan,效果以下图17所示:


图17

能够看到咱们成功的添加了一条数据,而且用户数据主键编号也返回了,咱们在执行参数中并无添加id的值,这个id是数据库自动生成的,springDataJPA查询成功后会自动返回主键的值到实体主键映射字段中。
多插入几条数据方便咱们下一步操做,插入完成后咱们再次访问用户列表请求地址,效果以下图18所示:


图18

上图18咱们查询出了数据库中的全部用户数据,那么咱们接下来更新下主键编号为1的用户信息,咱们把age以及address分别改为,23,beijing,效果以下图19所示:


图19

咱们能够看到,在访问地址的时候我并无传name字段的值,那么springDataJPA会认为你要清空name字段的值因此这样访问是不能够的,咱们须要将name也传入,效果以下图20所示:


图20

能够看到上图20,更新用户的name属性是有值得。大家可自行访问用户列表地址查询是否已经更新,我这里就不作演示了。

删除用户

咱们能够根据用户的主键来删除一条数据,以下图21所示:


图21

咱们能够看到我传入的id=1,删除完成后咱们自动读取了用户列表,springDataJPA给咱们没有返回id=1的用户,咱们查看数据库数据也没有发现id=1用户,证实id=1的用户确实已经被从数据库中删除了。

总结

上述内容就是咱们本章的所有内容,主要讲述了springboot整合mysql而且使用SpringDataJPA来完成数据库的CRUD操做。
由于咱们是接着上一章的内容讲解的,若是你有不明白的地方能够去查看个人第二章:SpringBoot与JSP间不可描述的秘密

本章内容已经更新到码云,请你们下载学习:

SpringBoot配套源码地址:gitee.com/hengboy/spr…

SpringCloud配套源码地址:gitee.com/hengboy/spr…

SpringBoot相关系列文章请访问:目录:SpringBoot学习目录

QueryDSL相关系列文章请访问:QueryDSL通用查询框架学习目录

SpringDataJPA相关系列文章请访问:目录:SpringDataJPA学习目录

SpringBoot相关文章请访问:目录:SpringBoot学习目录,感谢阅读!

欢迎加入QQ技术交流群,共同进步。


QQ技术交流群
相关文章
相关标签/搜索