当前位置:首页 > Java

java如何逻辑删除

2026-03-26 03:00:00Java

逻辑删除的实现方法

在Java中实现逻辑删除通常涉及在数据库表中添加一个标记字段(如is_deleted),通过更新该字段而非物理删除数据来达到删除效果。以下是常见的实现方式:

使用MyBatis-Plus实现逻辑删除

MyBatis-Plus提供了便捷的逻辑删除注解配置:

// 实体类中添加逻辑删除字段
@Data
public class User {
    private Long id;
    private String name;

    @TableLogic
    private Integer isDeleted; // 1表示删除,0表示未删除
}

application.yml中配置逻辑删除的全局值:

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: isDeleted  # 全局逻辑删除字段
      logic-not-delete-value: 0     # 未删除值
      logic-delete-value: 1         # 删除值

JPA实现逻辑删除

通过@SQLDelete@Where注解实现:

@Entity
@Table(name = "user")
@SQLDelete(sql = "UPDATE user SET is_deleted = 1 WHERE id = ?")
@Where(clause = "is_deleted = 0")
public class User {
    @Id
    private Long id;

    private String name;

    @Column(name = "is_deleted")
    private boolean deleted;
}

手动实现逻辑删除

对于不使用ORM框架的场景,可以直接编写SQL:

// 删除操作改为更新
String sql = "UPDATE table_name SET is_deleted = 1 WHERE id = ?";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setLong(1, id);
ps.executeUpdate();

查询时的注意事项

所有查询语句需要自动过滤已逻辑删除的数据:

SELECT * FROM user WHERE is_deleted = 0;

在MyBatis-Plus或JPA中,框架会自动添加该条件。手动实现时需要确保每个查询都包含过滤条件。

逻辑删除的优缺点

优点
保留数据完整性,便于数据恢复和审计追踪
避免外键约束问题

java如何逻辑删除

缺点
增加查询复杂度,需要始终考虑过滤条件
数据库表体积会持续增长
需要定期归档真正不需要的数据

标签: 逻辑java
分享给朋友:

相关文章

java如何输入

java如何输入

使用Scanner类进行输入 Scanner类是Java中最常用的输入工具,适用于从控制台或文件读取数据。需要导入java.util.Scanner包。 基本语法: Scanner sca…

java如何创建类

java如何创建类

创建类的基本语法 在Java中,类通过class关键字定义,语法如下: [访问修饰符] class 类名 { // 成员变量(属性) // 构造方法 // 成员方法 }…

如何编译java文件

如何编译java文件

安装JDK 确保系统已安装Java Development Kit(JDK)。可通过命令行输入 javac -version 和 java -version 验证。若未安装,需从Oracle或Open…

如何安装java软件

如何安装java软件

下载Java安装包 访问Oracle官方网站或OpenJDK开源项目页面,选择适合操作系统的Java版本(如Windows、macOS或Linux)。对于个人使用,通常下载JDK(Java Devel…

java如何遍历map

java如何遍历map

遍历Map的几种方法 在Java中,遍历Map有多种方式,可以根据需求选择合适的方法。以下是常见的几种遍历方式: 使用entrySet遍历 通过entrySet()方法获取键值对的集合,可以同时访问…

java如何实现多继承

java如何实现多继承

在Java中,由于语言设计本身不支持多继承(即一个类不能直接继承多个父类),但可以通过以下方式间接实现类似多继承的效果: 使用接口实现多继承 接口允许一个类实现多个接口,从而继承多个抽象行为。接口中…