当前位置:首页 > 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如何创建对象

创建对象的基本方法 在Java中,创建对象主要通过new关键字调用构造函数完成。基本语法为: ClassName objectName = new ClassName(); 例如创建String对象…

java如何导入jar包

java如何导入jar包

在Eclipse中导入JAR包 右键项目 -> 选择"Properties" -> 左侧导航选择"Java Build Path" -> 切换到"Libraries"标签 ->…

如何选择java培训

如何选择java培训

评估培训机构资质 选择有正规资质的机构,查看其营业执照、办学许可证等。优先考虑具备人力资源和社会保障部或教育部认证的机构,这类机构的教学质量和课程设置通常更规范。 考察课程内容与行业需求匹配度…

java中如何获取当前时间

java中如何获取当前时间

获取当前时间的几种方法 使用 java.time 包(Java 8及以上推荐) import java.time.LocalDateTime; LocalDateTime currentTime =…

教你如何完全卸载java

教你如何完全卸载java

卸载 Java 的步骤 Windows 系统 打开控制面板,选择“程序和功能”或“卸载程序”。在列表中找到 Java 相关的条目,通常显示为“Java”或“Java(TM)”。右键点击选择卸载,按照…

登录实现逻辑vue

登录实现逻辑vue

登录实现逻辑(Vue) 在Vue中实现登录功能通常涉及前端表单处理、API请求、状态管理和路由控制。以下是关键步骤和代码示例: 表单设计与双向绑定 使用v-model绑定表单数据,结合el-form…