博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第三章:SpringBoot使用SpringDataJPA完成CRUD
阅读量:7236 次
发布时间:2019-06-29

本文共 3334 字,大约阅读时间需要 11 分钟。

前两章我们简单讲解了SpringBoot的易用性,SpringBoot框架内部提供了很多我们需要用到的组件,需要什么你就可以拿到项目里。

在我们平时的项目中,数据的存储以及访问都是最为核心的关键部分,现在有很多企业采用主流的数据库,如关系型数据库:MySQL,oracle,sqlserver。非关系型数据库:redis,mongodb等。
SpringBoot已经为我们提供了很多种的数据库来做数据存储以及读取,上面只是简单的几种,那么我接下来以MySQL为例来讲述下本章的内容。

本章目标

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

构建项目

接下来我们先来创建SpringBoot项目,如下图1所示:

图1

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

图2

点击Next后选择我们需要导入项目的SpringBoot组件,这里要注意一定要选择正确的组件,如下图3所示:

图3

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

图4

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

图5

上图的注释是我添加的,项目默认创建完成后是没有注释的。

注意:如果使用内部tomcat运行项目需要将spring-boot-starter-tomcat的scope标签注释掉。

配置数据源以及JPA

今后我们修改application.properties文件配置为application.yml配置。.yml配置文件与.properties配置要更清晰更有层次感,可以很明了的看懂配置信息。

我们在resources目录下创建application.yml文件,并且配置DataSource以及JPA,如下图6所示:

图6

可以看到上述配置文件内,我们使用了本地的一个mysql数据库,mysql数据库是我们事先安装好的,并且创建了一个名叫test的数据库,JPA的配置了show-sql用来在控制台输出JPA自动生成的sql语句。

上述数据配置文件已经完成,接下来我们新建数据库测试表结构我使用的数据库工具是Navicat你们可自行下载或者使用其他工具,结构如下图7所示:

图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

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

初尝试运行项目

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

图15

我红色标记的部分可以看到,springmvc加载了我定义的请求。那么我们尝试访问用户列表路径:可以看到如下图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配套源码地址:

SpringCloud配套源码地址:

SpringBoot相关系列文章请访问:

QueryDSL相关系列文章请访问:

SpringDataJPA相关系列文章请访问:

SpringBoot相关文章请访问:,感谢阅读!

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

QQ技术交流群

转载地址:http://bpgfm.baihongyu.com/

你可能感兴趣的文章
管理Java垃圾回收的五个建议
查看>>
【MySQL】MySQL的索引
查看>>
数数字
查看>>
配置阿里云Docker镜像加速仓库
查看>>
社交的基本逻辑
查看>>
DBSCAN
查看>>
Maven 使用 二——nexus
查看>>
解决maven的依赖总是无法下载完成
查看>>
【Python3 爬虫】15_Fiddler抓包分析
查看>>
【备忘】EntityFramework 6 升级到 EntityFrameworkCore 注意点
查看>>
xilinx uboot网卡驱动分析
查看>>
Spring Boot系列之配置日志输出等级
查看>>
Java 底层机制(JVM/堆/栈/方法区/GC/类加载)
查看>>
原 在windows上创建文件名以“.”开头的文件
查看>>
实时流处理Storm、Spark Streaming、Samza、Flink孰优孰劣
查看>>
e297: write error in swap file
查看>>
并发错误:事务(进程 ID )与另一个进程已被死锁在 lock 资源上,且该事务已被选作死锁牺牲品...
查看>>
如何获取用户的地理位置-浏览器地理位置(Geolocation)API 简介
查看>>
如何在Solr中实现多core查询
查看>>
Ubuntu下搭建Hyperledger Fabric v1.0环境
查看>>