spring boot实现软删除的示例代码

下面是Spring Boot实现软删除的完整攻略:

1. 理解软删除

首先需要了解软删除的概念和作用。软删除指的是不是真正删除数据,而是在数据库中新增一个状态字段,用于标记该数据是否被删除。这样可以保留数据完整性,同时又不会真正删除数据,方便数据恢复。

2. 实现示例1

我们以一个简单的用户信息管理为例进行讲解。首先创建一个用户实体类,包含id、用户名、密码和删除状态等属性。

@Entity
@Table(name = "tb_user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String password;
    @Column(name = "is_deleted")
    private Boolean deleted = false;

    //getter and setter
}

在实体类中添加deleted字段,并使用@Column注解标记,表明对应于数据库中is_deleted字段。同时将deleted默认值设置为false。

接下来定义Repository接口,继承JpaRepository,并添加根据deleted字段查询的方法。

public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findAllByDeletedFalse();
    Optional<User> findByIdAndDeletedFalse(Long id);
}

在Controller层中添加删除用户的功能,使用软删除方式,即将删除状态设置为true,而不是真正删除用户信息。

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserRepository userRepository;

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
        Optional<User> userOptional = userRepository.findByIdAndDeletedFalse(id);
        if (!userOptional.isPresent()) {
            return ResponseEntity.notFound().build();
        }
        User user = userOptional.get();
        user.setDeleted(true);
        userRepository.save(user);
        return ResponseEntity.noContent().build();
    }
}

其中,findByIdAndDeletedFalse方法根据id和deleted字段查询用户,如果删除状态为true,则返回not found响应。否则,更新用户删除状态为true,在数据库中进行软删除。最后返回no content响应。

3. 实现示例2

除了使用Repository定义查询方法外,我们也可以使用自定义实现的方式。

创建UserRepositoryCustom接口,定义根据deleted字段查询用户的方法。

public interface UserRepositoryCustom {
    List<User> findAllByDeletedFalse();
}

创建UserRepositoryCustomImpl类实现UserRepositoryCustom接口,并在其中添加查询方法的实现代码。

public class UserRepositoryCustomImpl implements UserRepositoryCustom {
    @PersistenceContext
    private EntityManager em;

    @Override
    public List<User> findAllByDeletedFalse() {
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<User> query = cb.createQuery(User.class);
        Root<User> root = query.from(User.class);
        query = query.select(root).where(cb.isFalse(root.get(User_.deleted)));
        TypedQuery<User> typedQuery = em.createQuery(query);
        return typedQuery.getResultList();
    }
}

在Repository接口中添加自定义实现方法的声明。

public interface UserRepository extends JpaRepository<User, Long>, UserRepositoryCustom {
    Optional<User> findByIdAndDeletedFalse(Long id);
}

最后,在Controller中使用自定义实现方法调用查询。

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserRepository userRepository;

    @GetMapping
    public List<User> getAllUsers() {
        return userRepository.findAllByDeletedFalse();
    }
}

以上就是Spring Boot实现软删除的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring boot实现软删除的示例代码 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java线程实现时间动态显示

    Java线程实现动态时间显示可以通过以下步骤完成: 1.创建一个实现了Runnable接口的类,在该类中实现线程的逻辑。 2.在逻辑中使用Java提供的日期时间类(如LocalDateTime)获取当前时间,并将其格式化为需要显示的格式(如HH:mm:ss)。 3.将格式化后的时间打印输出到控制台或其他输出流。 4.使用Thread类创建线程实例,并调用st…

    Java 2023年5月18日
    00
  • Springboot日期转换器实现代码及示例

    Spring Boot 日期转换器实现代码及示例 在Spring Boot应用程序中,我们经常需要将日期字符串转换为Java日期对象或将Java日期对象格式化为日期字符串。为了实现这些功能,我们可以使用Spring Boot提供的日期转换器。在本文中,我们将详细介绍如何实现Spring Boot日期转换器,并提供两个示例说明。 实现日期转换器 在Spring…

    Java 2023年5月18日
    00
  • JavaScript Uploadify文件上传实例

    下面是JavaScript Uploadify文件上传实例的完整攻略,主要包括以下几个部分: 1. 环境搭建 在开始之前,需要将环境搭建好,确保能够正常运行。需要安装以下两个组件: jQuery库(版本>=1.7) Uploadify插件(版本>=3.2) 2. HTML结构 在HTML页面中,需要创建一个file input来选择需要上传的文件…

    Java 2023年6月15日
    00
  • Java Spring Controller 获取请求参数的几种方法详解

    下面是关于“Java Spring Controller 获取请求参数的几种方法详解”的完整攻略,包含两个示例说明。 Java Spring Controller 获取请求参数的几种方法详解 在Java Spring应用程序中,Controller是处理HTTP请求的核心组件。在处理请求时,我们通常需要获取请求参数。本文将详细介绍Java Spring Co…

    Java 2023年5月17日
    00
  • 浅谈Action+Service +Dao 功能

    “浅谈Action+Service+Dao功能”通常是指基于JavaEE三层架构的应用开发模式,其中包括表示层(Action)、业务逻辑层(Service)和数据访问层(Dao)三个核心部分。下面我会详细讲解每个部分的作用和功能,并提供两个示例。 一、Action层 1.1 概述 Action层通常是指MVC框架中的控制器部分,负责接收用户请求,提交用户输入…

    Java 2023年5月20日
    00
  • js表达式计算器代码

    以下是“JS表达式计算器代码”的完整攻略: 概述 JS表达式计算器代码是一个基于JavaScript语言,可以实现简单的表达式计算的小程序。 实现步骤 创建HTML文件,包含输入框、按钮和输出框等必要元素。 编写JavaScript代码,实现计算功能。 获取输入框里的表达式。 利用正则表达式匹配数字和运算符,并将它们保存在数组中。 计算表达式的值。 将计算结…

    Java 2023年6月15日
    00
  • JAVA基本概念详解

    让我们来详细讲解一下“JAVA基本概念详解”的完整攻略。 一、什么是JAVA Java是一种编程语言和计算机平台,由Sun Microsystems公司于1995年5月推出。Java技术的核心是Java虚拟机(JVM)。Java主要用于开发Web应用程序和移动应用程序。 二、JAVA的基本概念 1. Java程序的组成 Java程序由类(Class)和对象(…

    Java 2023年5月19日
    00
  • Maven 项目用Assembly打包可执行jar包的方法

    下面是详细的“Maven 项目用 Assembly 打包可执行 jar 包的方法”的攻略: 一、前提条件 已安装 Maven 并配置环境变量 已经有一个 Maven 项目 二、添加 Assembly 插件到 Maven 项目中 在项目的 pom.xml 文件中添加以下插件配置: <build> <plugins> <plugin…

    Java 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部