热门标签 | 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缓存的东西,这是优化方面的东西。
其实笔者学这个的东西是因为带着任务学的,所以目的性比较强,相应的就不够系统,这些文章也是来记录一下自己的学习情况罢了,希望对你们有所帮助。


推荐阅读
  • RancherOS 是由 Rancher Labs 开发的一款专为 Docker 设计的轻量级 Linux 发行版,提供了一个全面的 Docker 运行环境。其引导镜像仅 20MB,非常适合在资源受限的环境中部署。本文将详细介绍如何在 ESXi 虚拟化平台上安装和配置 RancherOS,帮助用户快速搭建高效、稳定的容器化应用环境。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • Go语言实现Redis客户端与服务器的交互机制深入解析
    在前文对Godis v1.0版本的基础功能进行了详细介绍后,本文将重点探讨如何实现客户端与服务器之间的交互机制。通过具体代码实现,使客户端与服务器能够顺利通信,赋予项目实际运行的能力。本文将详细解析Go语言在实现这一过程中的关键技术和实现细节,帮助读者深入了解Redis客户端与服务器的交互原理。 ... [详细]
  • 如何构建基于Spring MVC框架的Java Web应用项目
    在构建基于Spring MVC框架的Java Web应用项目时,首先应创建一个新的动态Web项目。接着,需将必要的JAR包导入至WebContent/WEB-INF/lib目录下,确保包括Spring核心库及相关依赖。如遇缺失的JAR包,可向社区求助或通过Maven等工具自动下载。正确配置后,即可开始搭建应用结构与功能模块。 ... [详细]
  • 深入解析Spring Boot自动配置机制及其核心原理
    Spring Boot 的自动配置机制是其核心特性之一,旨在简化开发过程并提高效率。本文将深入探讨这一机制的工作原理,解释其如何通过智能化的类路径扫描和条件注解实现自动装配。通过对 Spring Boot 自动配置的详细解析,读者将能够更好地理解和应用这一强大功能,从而在实际项目中更加高效地利用 Spring Boot。 ... [详细]
  • 本文深入探讨了 C# 中 `SqlCommand` 和 `SqlDataAdapter` 的核心差异及其应用场景。`SqlCommand` 主要用于执行单一的 SQL 命令,并通过 `DataReader` 获取结果,具有较高的执行效率,但灵活性较低。相比之下,`SqlDataAdapter` 则适用于复杂的数据操作,通过 `DataSet` 提供了更多的数据处理功能,如数据填充、更新和批量操作,更适合需要频繁数据交互的场景。 ... [详细]
  • 在Java应用程序中调用`response.getStatus()`方法时遇到了`NoSuchMethodError`异常,经过分析,初步判断为依赖冲突问题。通过检查项目依赖树发现,当前项目版本与某些库的版本不兼容,导致该方法无法被正确识别。建议通过更新相关依赖版本或使用依赖管理工具(如Maven或Gradle)来解决此问题,确保所有依赖项版本一致且兼容。 ... [详细]
  • 本文作为“实现简易版Spring系列”的第五篇,继前文深入探讨了Spring框架的核心技术之一——控制反转(IoC)之后,将重点转向另一个关键技术——面向切面编程(AOP)。对于使用Spring框架进行开发的开发者来说,AOP是一个不可或缺的概念。了解AOP的背景及其基本原理,对于掌握这一技术至关重要。本文将通过具体示例,详细解析AOP的实现机制,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文详细介绍了使用响应文件在静默模式下安装和配置Oracle 11g的方法。硬件要求包括:内存至少1GB,具体可通过命令`grep -i memtotal /proc/meminfo`进行检查。此外,还提供了详细的步骤和注意事项,确保安装过程顺利进行。 ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • Liferay Portal 中 AutoEscape 构造函数的应用与实例代码解析 ... [详细]
  • 开发笔记:校园商铺系统中店铺注册功能模块的Controller层优化与重构
    开发笔记:校园商铺系统中店铺注册功能模块的Controller层优化与重构 ... [详细]
  • MySQL日志分析在应急响应中的应用与优化策略
    在应急响应中,MySQL日志分析对于检测和应对数据库攻击具有重要意义。常见的攻击手段包括弱口令、SQL注入、权限提升和备份数据窃取。通过对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社区 版权所有