实现“真删除”和“假删除”的方法(20160120)

删除的方法很简单,只要通过查到到该条数据的ID,就可以对该条数据进行操作,通过sql语句,操作数据库,就可以实现数据的删除操作。

 

但是在实际的应用当中,会出现这样的状况,当数据表是关联了多张数据表的时候,删除一条数据就会很麻烦;其次,因为真删除功能的数据是不可恢复的,所以为了保证数据的安全性和数据的可用性,考虑到假删除方式。

 

如何实现假删除呢?

首先在数据表中增加一个状态字段status,该字段默认为0,是数据的有效状态,当该状态变为1时是无效状态,当状态置1时,该条数据在前台不显示,但仍旧存在于数据库中。

 

其中的变化为,在sql语句中的变化,对应的sql语句为 update hcc_robotparam set status='1' where id=#{id},而不是用真删除的delete。

并且在查询列表中,也要加一个条件,即只有当status为0的状态的数据显示,而为一的状态不显示,这就是假删除的实现。

 

想想微信和QQ的删除功能实现,其实也是假删除状态,当用户把自己的手机中的数据删除后,自己这里不显示聊天记录了,但是在对方那里依旧显示,这就是说腾讯的后台数据库中是依旧存在这些数据的,只是显示与不显示的问题。

 

转载于:https://www.cnblogs.com/chensq/p/5144769.html

删除是指将数据的状态标记为已删除,而不是正地从数据库删除。Spring Boot 和 Mybatis Plus 都提供了实现删除的方式。 首先,在数据库表中添加一个表示删除状态的字段,比如 is_deleted。默认情况下,这个字段的值应该是 false。 然后,在 Mybatis Plus 中,可以使用注解 @TableLogic 和 @TableField 来标记这个字段。@TableLogic 表示逻辑删除,@TableField 表示数据表中的字段。 示例代码如下: ```java @Data @TableName("user") public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; @TableLogic @TableField(value = "is_deleted", fill = FieldFill.INSERT) private Boolean deleted; } ``` 在上面的代码中,@TableLogic 表示逻辑删除,@TableField(value = "is_deleted", fill = FieldFill.INSERT) 表示 is_deleted 字段在插入数据时自动填充为 false。 接下来,在进行查询时,需要将 is_deleted 字段的值设为 false,示例代码如下: ```java public interface UserDao extends BaseMapper<User> { @Override @Select("select * from user where is_deleted = false") List<User> selectList(Wrapper<User> queryWrapper); } ``` 在上面的代码中,使用了 Mybatis Plus 的 Wrapper 类来构建查询条件。is_deleted 字段的值被设为 false。 最后,在进行删除时,只需要将 is_deleted 字段的值设为 true 即可,示例代码如下: ```java public void deleteUser(Long id) { User user = new User(); user.setId(id); user.setDeleted(true); userDao.updateById(user); } ``` 在上面的代码中,将 id 对应的数据的 is_deleted 字段设为 true,达到删除的目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值