spring boot 中的逻辑删除

本文介绍了如何利用时间字段deleted_at作为逻辑删除的标志,通过在数据库表中添加该字段并在实体类中映射,结合MyBatis-Plus的配置和注解,实现数据的逻辑删除和查询过滤,避免实际删除操作。
摘要由CSDN通过智能技术生成

如果你想使用时间字段作为逻辑删除的标志,那么你可以这样做:

  • 在数据库表中添加一个名为deleted_at的字段,类型为datetime或timestamp,用来存储数据被删除的时间。
  • 在实体类中添加一个名为deletedAt的属性,类型为LocalDateTime或Date,用来映射数据库中的deleted_at字段,并添加@TableLogic注解。
  • 在配置文件中指定逻辑删除的值,比如逻辑未删除值为null,逻辑删除值为当前时间。
  • 这样,当你调用deleteById或deleteBatchIds等方法时,就会自动更新deleted_at字段为当前时间,而不是真正删除数据。当你调用selectById或selectList等方法时,就会自动过滤掉deleted_at不为null的数据,只查询未被删除的数据。

下面是一个使用mybatis-plus实现逻辑删除的代码示例:

// 数据库表
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `username` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名',
  `password` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',
  `age` int(10) NULL DEFAULT NULL COMMENT '年龄',
  `deleted_at` datetime NULL DEFAULT NULL COMMENT '逻辑删除时间',
  PRIMARY KEY (`id`) USING BTREE
)

// 实体类
@Data
@TableName("user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String username;
    private String password;
    private Integer age;
    @TableLogic
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime deletedAt;
}

// 配置文件
mybatis-plus:
  global-config:
    db-config:
      logic-delete-value: now() # 逻辑已删除值
      logic-not-delete-value: null # 逻辑未删除值

// 测试类
@SpringBootTest
class UserTest {

    @Autowired
    private UserMapper userMapper;

    // 测试插入数据
    @Test
    void testInsert() {
        User user = new User();
        user.setUsername("Tom");
        user.setPassword("123456");
        user.setAge(18);
        userMapper.insert(user);
        System.out.println(user);
    }

    // 测试查询数据
    @Test
    void testSelect() {
        List<User> users = userMapper.selectList(null);
        users.forEach(System.out::println);
    }

    // 测试逻辑删除数据
    @Test
    void testDelete() {
        int rows = userMapper.deleteById(1L);
        System.out.println("影响行数:" + rows);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值