spring boot 中的逻辑删除

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

  • 在数据库表中添加一个名为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 users = userMapper.selectList(null);
        users.forEach(System.out::println);
    }

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

你可能感兴趣的:(spring,boot,mybatis,java)