Spring boot (一)—— 简单的增删查改

Spring boot (一) —— 简单的增删查改

本篇介绍如何使用spring boot 框架实现对数据的增删查改操作。这里先介绍一下我使用的工具。

  1. 编译器:IDEA
  2. 数据库:postgre
  3. 测试工具:postman
  4. 数据库工具: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.Driver
    username: postgres
    password: 123456
    url: jdbc:postgresql://localhost:5432/postgres2
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
    properties:
      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 {
    @Autowired
    UserRepository 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缓存的东西,这是优化方面的东西。
其实笔者学这个的东西是因为带着任务学的,所以目的性比较强,相应的就不够系统,这些文章也是来记录一下自己的学习情况罢了,希望对你们有所帮助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章