热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringBoot实战(一):基础的CRUD操作详解

在《SpringBoot实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握SpringBoot框架的应用开发技巧。
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文件,首先添加依赖


		
			org.springframework.boot
			spring-boot-starter-data-jpa
		
		
		
			org.springframework.boot
			spring-boot-starter-jdbc
		
		
		
			org.springframework.boot
			spring-boot-starter-web
		

		
			org.postgresql
			postgresql
			runtime
		
		
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
		
        
            org.springframework.data
            spring-data-jpa
            2.1.9.RELEASE
        
    

这些就是我这个项目所要用到的全部依赖,缺了哪些补哪些就可以了。
然后打开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, JpaSpecificationExecutor
{
    List 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 userInfoList(){
        return userRepository.findAll();
    }
    //条件查询
    @GetMapping(value = "/find")
    private List findOne(@RequestParam("name")String name){
        return userRepository.findUserInfoByName(name);
    }
    //增
    @PostMapping(value = "/add")
    private List addOne(@RequestParam("name")String name){
        UserInfo user = new UserInfo();
        user.setName(name);
        userRepository.save(user);
        return userRepository.findAll();
    }
    //改
    @PutMapping(value = "/update")
    private List 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 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缓存的东西,这是优化方面的东西。
其实笔者学这个的东西是因为带着任务学的,所以目的性比较强,相应的就不够系统,这些文章也是来记录一下自己的学习情况罢了,希望对你们有所帮助。


推荐阅读
  • 本文介绍了如何在WildFly 10中配置MySQL数据源时遇到的服务依赖问题及其解决方案。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • 软件工程课堂测试2
    要做一个简单的保存网页界面,首先用jsp写出保存界面,本次界面比较简单,首先是三个提示语,后面是三个输入框,然 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • 本文详细介绍了如何通过RPM包在Linux系统(如CentOS)上安装MySQL 5.6。涵盖了检查现有安装、下载和安装RPM包、配置MySQL以及设置远程访问和开机自启动等步骤。 ... [详细]
  • 本文详细介绍了如何在 MySQL 中授予和撤销用户权限。包括创建用户、赋予不同级别的权限(如表级、数据库级、服务器级)、使权限生效、查看用户权限以及撤销权限的方法。此外,还提供了常见错误及其解决方法。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • 本文详细介绍了如何解压并安装MySQL集群压缩包,创建用户和组,初始化数据库,配置环境变量,并启动相关服务。此外,还提供了详细的命令行操作步骤和常见问题的解决方案。 ... [详细]
author-avatar
躺在地球上的熊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有