第三章:SpringBoot使用SpringDataJPA完成CRUD本章目标构建项目配置数据源以及JPA 初尝试运行项目总结

前两章我们简单讲解了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

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

 初尝试运行项目

具体如何运行项目请到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配套源码地址:https://gitee.com/hengboy/spring-boot-chapter

SpringCloud配套源码地址:https://gitee.com/hengboy/spring-cloud-chapter

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

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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏雪地二货笔记库

nodejs学习笔记(1)-安装配置和helloworld

关于nodejs的概念,查了查官网和博客,说他不是一门语言也不是库也不是框架,是一个js的运行环境。 这个概念有些模糊,运行环境这个词让我有些不明所以,又往后查...

743
来自专栏JetpropelledSnake

Django学习笔记之使用 Django项目开发框架

1113
来自专栏一个爱瞎折腾的程序猿

分享我在 vue 项目中关于 api 请求的一些实现及项目框架

axios 默认提交格式为:application/json 可使用 qs 模块(需要安装)转换后提交格式为 application/x-www-form-u...

641
来自专栏较真的前端

您必须知道的 Git 分支开发规范

Git 是目前最流行的源代码管理工具。 为规范开发,保持代码提交记录以及 git 分支结构清晰,方便后续维护,现规范 git 的相关操作

784
来自专栏云计算

基于Go语言使用NATS Streaming构建分布式系统和微服务

一段时间前,我写了一篇名为向 Go 语言开发者介绍 NATS 的博客文章以便使用Apcera NATS 作为基于GO语言的构建分布式系统和微服务的消息系统。在本...

4383
来自专栏python3

django创建项目

Django的MTV模式本质上与MVC模式没有什么差别,也是各组件之间为了保持松耦合关系,只是定义上有些许不同,Django的MTV分别代表:

722
来自专栏烂笔头

Django 1.10中文文档-第一个应用Part1-请求与响应

目录[-] 在本教程中,我们将引导您完成一个投票应用程序的创建,它包含下面两部分: 一个可以进行投票和查看结果的公开站点; 一个可以进行增删改查的后...

3345
来自专栏云计算教程系列

如何在Ubuntu 14.04上安装和配置Naxsi

Naxsi是第三方Nginx模块,提供Web应用程序防火墙功能。它为您的Web服务器带来了额外的安全性,并保护您的服务器免受各种Web攻击,如XSS和SQL的注...

810
来自专栏社区的朋友们

运维利器之万能的 strace

strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。strace...

2970
来自专栏从零开始学自动化测试

Fiddler抓包5-接口测试(Composer)

前言 Fiddler最大的优势在于抓包,我们大部分使用的功能也在抓包的功能上,当然fiddler做接口测试也是非常方便的。 对于没有接口测试文档的时候,可以直...

2784

扫码关注云+社区