第三章: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 条评论
登录 后参与评论

相关文章

来自专栏有趣的django

Django REST framework+Vue 打造生鲜超市(八) 九、个人中心功能开发

九、个人中心功能开发 9.1.drf的api文档自动生成和 (1) url #drf文档,title自定义 path('docs',include_do...

4558
来自专栏Pythonista

Django之XSS攻击

    xss跨站脚本攻击(Cross site script,简称xss)是一种“HTML注入”,由于攻击的脚本多数时候是跨域的,所以称之为“跨域脚本”。 ...

3482
来自专栏北京马哥教育

原创投稿 | Zabbix的编译安装并发送通知邮件

1.写在前面 本文主要介绍的是zabbix的编译安装过程,包含它的基础环境LNMP,虽然zabbix官方一般推荐的环境是LAMP。以及实现简单的监控任务,在发...

3918
来自专栏Web项目聚集地

Linux养成计划(五)

非必需时尽量少用root用户登陆,因为它是系统的超级管理员,这里的系统管理员root和Windows中的administrator还不一样,Linux中的roo...

1281
来自专栏mathor

Tomcat初步

 启动Tomcat是通过双击bin/startup.bat,测试是否启动成功,主要是通过访问localhost:8080,如果后期有需要修改访问的端口,可以通过...

1262
来自专栏名山丶深处

windows平台安装maven

1736
来自专栏Jerry的SAP技术分享

如何在ubuntu上安装virtualbox的driver module vboxdrv

干净的ubuntu安装完毕之后是没有vboxdrv这个driver module的。

3764
来自专栏主机笔记

安装serverstatus监控多台服务器状态

如果是一台服务器很好管理,但是服务器多了,就很容易忘记,因此就需要一个监控的平台。serverstatus是一个开源的服务器监控系统,可以利用serversta...

8517
来自专栏魏艾斯博客www.vpsss.net

WordPress 提示”存在不一致的文件权限”的解决办法

1613
来自专栏开源优测

linux下安装部署jenkins

环境搭建(linuxs版本) 一、安装包下载地址 注:笔者以64位为例 1、JDK安装包: http://www.oracle.com/technetwork/...

3035

扫码关注云+社区

领取腾讯云代金券