Spring boot (一) —— 简单的增删查改
本篇介绍如何使用spring boot 框架实现对数据的增删查改操作。这里先介绍一下我使用的工具。
编译器:IDEA数据库:postgre测试工具:postman数据库工具:Navicat Premium 12
一、新建一个spring 项目
这是IDEA自带的Spring Assistant插件,假如你的IDEA没有,那就去下载一下,下载方法如下
点击右下角的configure,选择plugins,在Marketplace里面搜索Spring Assistant,找到后安装它。(假如你的网络不好,有可能搜不到东西,我就是被公司电脑坑惨了,如果这里实在不行,可以去IDEA的官网直接下载)
二、介绍一下spring项目的构成
新建完成后,你会看到类似这样的目录,然后我们就可以开始写我们的代码了。在写之前,我先介绍一下我们需要用到的文件
controller、dao、entity这三个文件夹是自己建的,这里我是将它分为三个层,关于这些分层,网上都有介绍和教学(默认都是这些名字),实际上我还是不够规范,没有将接口和实现分离,但是不影响。Demo4Application是启动类,启动程序就是通过它,这里我们不需要改动它application.properties和application.yml都是配置文件,一种是properties文件,另一种是yml文件,可以自己建的,我们推荐yml文件,因为它格式更好看[滑稽],当然选择其中一个,另一个文件要把它删了。pom.xml是我们添加jar包时需要改动的以上这些文件在网上都能查到介绍,有兴趣的可以去查查看
三、代码部分
我们先打开pom.xml文件,首先添加依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId><version>2.1.9.RELEASE</version></dependency></dependencies>
这些就是我这个项目所要用到的全部依赖,缺了哪些补哪些就可以了。
然后打开application.yml文件,写上配置:
spring:datasource:driver-class-name: org.postgresql.Driverusername: postgrespassword: 123456url: jdbc:postgresql://localhost:5432/postgres2jpa:hibernate:ddl-auto: updateshow-sql: trueproperties:hibernate:temp:use_jdbc_metadata_defaults: false
datasource:配置数据库;hibernate:直接照抄数据库我用的是postgre的,用其他数据库(mysql等)的可以自行更换username、password、url这些都是数据库的属性,网上有大把解释,我就不赘述了
接着就是功能逻辑的代码书写了,按照之前的分层,我们先写entity(实体类),entity里面放的就是数据库的表,比如我这里的UserInfo,在这个类中定义好表的所有字段,像Id、name等等。
@Entity@Table(name = "user_info")public class UserInfo {@Id@Column(name = "id")@GeneratedValue(strategy = GenerationType.AUTO)private Long id;@Column(name = "name",nullable = false)private String name;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
像@Entity、@Table、@Id这些注解都有各自的作用,建议读者自己一个个去搜索其含义和作用,看完之后就能理解这个entity类了。
然后来到UserRepository这个接口,这是一个实现spring boot增删查改的最关键的一个接口,但同时它的写法也十分简单,因为很多方法它已经帮我们实现了。
public interface UserRepository extends JpaRepository<UserInfo, Long>, JpaSpecificationExecutor<UserInfo>{List<UserInfo> findUserInfoByName(String name);//按名字字段查询UserInfo信息}
接口必须继承JpaRepository<实体类名,Id的类型>,JpaSpecificationExecutor<实体类名>。
这个findUserInfoByName方法是我们自行添加上去的,因为默认方法里面并不知道我们的实体类里有什么字段,所以需要我们自行根据需求去定义条件查询的参数类型。
最后便是Controller层的UserController,这个类是前端和后台的枢纽,前端传参和后台调用具体方法便是在这个类中实现。
@RestController@RequestMapping(value = "/user")public class UserController {@AutowiredUserRepository userRepository;//查@GetMapping(value = "/query")private List<UserInfo> userInfoList(){return userRepository.findAll();}//条件查询@GetMapping(value = "/find")private List<UserInfo> findOne(@RequestParam("name")String name){return userRepository.findUserInfoByName(name);}//增@PostMapping(value = "/add")private List<UserInfo> addOne(@RequestParam("name")String name){UserInfo user = new UserInfo();user.setName(name);userRepository.save(user);return userRepository.findAll();}//改@PutMapping(value = "/update")private List<UserInfo> updateOne(@RequestParam("id")Long id,@RequestParam("name")String name){UserInfo user = userRepository.findById(id).get();user.setName(name);userRepository.save(user);return userRepository.findAll();}//删@DeleteMapping(value = "/delete")private List<UserInfo> deleteOne(@RequestParam("id")Long id){userRepository.deleteById(id);return userRepository.findAll();}}
同理,这些注解都有各自的作用,建议读者一个个去网上搜索阅读相关的知识。这里我简单介绍一下@RequestMapping()和@GetMapping()。我们从后缀名可以看出,这两个及下面的三个注解的作用有相似之处。其实它们value值就是这个接口的地址,我们随便打开一个网站并打开其中一些内容,可以看到网站地址上有/**,而value值便是这些东西。只不过RequestMapping和GettingMapping所属的层级不同,举个例子,假如你在网页上要调用查询接口,那么你需要输入的便是/user/query。@GetMapping、@PostMapping、@PutMapping、@DeleteMapping这四个注解对应着查增改删这四个接口类型,但实际上我们常用的一般是Get和Post这两个类型,改和删甚至查都可以用Post类型,一般来说没有参数传入的方法都用Get类型,有参数传入就用Post类型,这个还要看你参数是怎么获取的。@RequestParam这个注解便是定义你通过表单获取这个参数,还有@RequestBody、@PathVariable等注解,分别有不同的应用场景,这是在开发中我们随时会用到的,读者可以去查询相关解释。(一般网页传的参数都是json数据,所以一般会用到RequsetBody,但是我们我们这里只是简单的测试这个增删查改功能,所以用RequestParam就够了)在这些方法中可以看到实现简单的增删查改基本只要用到UserRepository里面的默认方法就可以实现,如save(),findAll()这些。
四、测试
在application.yml里面配置数据库前,我们要建一个数据库,数据库属性就是我们配置的东西。那么如何建立一个postgre数据库?这时就要用到我们的数据库工具Navicat Premium 12了。
建立数据库
点击PostgreSQL,新建一个数据库连接
连接名随便起主机名即ip地址端口号初始数据库就写你所要建的数据库名即可用户名和密码便是你所要配置的用户名密码运行启动类
从控制台中我们可以看到这样一条信息,证明user_info表建立成功。
这样便算是启动成功了,可以开始我们的正式测试了。使用postman工具进行测试
输入地址后send查询,发现查询结果为空,因为我们的数据库一条数据都没有,接下来我们来增添一条数据
因为我们在调用这个方法是设置的返回数据库中的所有数据,所以这里它就返回数据库中的数据了,我们也可以设置返回字符串类型,只返回一个“成功”。多添加几条数据再查询一下。
可以看到这次的结果不为空了,然后我们再来测试一下条件查询、改和删。
可以看到,我们都已成功地对数据库中的表user_info进行增删查改操作。
五、总结
总的来说,增删查改只是spring boot中入门级的操作,同时也是最重要的操作之一,因为基本上所有的网页都离不开对数据库的增删查改操作。笔者在写这个demo的时候也出现了不少bug(笔者也是刚学不久),很多bug都是一些十分常见的问题,都可以在网上搜到解决方法,而且debug的过程也是你提升较快的一个过程,不要畏惧bug。
因为是我也是刚学,有一些东西自己深有体会,但却不知道怎么用言语来表达,这里也十分遗憾不能够把我理解的东西完整地告诉你们,在后面我也会慢慢写下去,榨干自己。
最后讲一下我目前对spring boot的掌握情况(入门级),学了增删查改之后就继续学了联表查询,联表查询做一个权限管理的例子,其实相当于增删查改的进阶版,做到联表的增删查改。然后就学分页查询,分页查询是一个比较基础且重要的东西,基本只要跟表有关都会用到。再然后就看了一点spring缓存的东西,这是优化方面的东西。
其实笔者学这个的东西是因为带着任务学的,所以目的性比较强,相应的就不够系统,这些文章也是来记录一下自己的学习情况罢了,希望对你们有所帮助。