上一篇文章《Mybatis plus应用(五)实现分页查询》我们介绍了使用mybatis plus进行分页,这篇文章我们介绍下常用的逻辑删除功能。在真实的环境中,一般我们使不允许做数据的物理删除的,只能做逻辑删除,因此一般会在表里面设计一个字段,例如deleted字段,0代表未删除,1代表已删除,这时候我们在查询数据的时候可以进行溯源。下面我们来演示一下mybatis plus中的逻辑删除。
一、创建user表
CREATE TABLE `user` ( `id` bigint(20) NOT NULL COMMENT '主键id', `name` varchar(20) DEFAULT NULL COMMENT '姓名', `age` tinyint(1) DEFAULT NULL COMMENT '性别,1:男,2:女', `tel` varchar(11) DEFAULT NULL COMMENT '手机号码', `version` int(11) DEFAULT '0' COMMENT '乐观锁', `deleted` tinyint(1) DEFAULT '0' COMMENT '是否删除,0:未删除,1:删除', `cts` datetime DEFAULT NULL COMMENT '创建时间', `uts` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; INSERT INTO `test2`.`user` (`id`, `name`, `age`, `tel`, `version`, `deleted`, `cts`, `uts`) VALUES (1, '张三', 15, '13888888888', 0, 0, '2023-02-21 11:39:06', '2023-02-21 11:39:06');
二、在application.yml或者application.properties文件中配置如下信息
mybatis-plus.global-config.db-config.logic-delete-value=1 mybatis-plus.global-config.db-config.logic-not-delete-value=0
这里配置的信息就是,删除的话使用1,未删除的话使用0
三、修改user的model,新增delete字段并且添加@TableLogic注解,代码如下:
package com.mybatis.demo.model; import java.io.Serializable; import java.util.Date; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.Version; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.ToString; import lombok.experimental.Builder; @Data @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode @ToString @Builder public class User implements Serializable { /** * */ private static final long serialVersionUID = 4824273035410072985L; @TableId private Long id; private String name; private Integer age; private String tel; //这里代表使用乐观锁 @Version private Integer version; @TableLogic private Integer deleted; @TableField(fill = FieldFill.INSERT) private Date cts; @TableField(fill = FieldFill.INSERT_UPDATE) private Date uts; }
四、crontroller中编写删除方法
@RequestMapping("/delete1") public String delete1() { userMapper.deleteById(1); return "SUCCESS"; }
五、测试下效果
可以看到日志里面整个删除的sql语句从delete变成了update
然后我们看下数据库
这里的deleted字段变更成了1。
备注:
1、在mybatis3.x的版本里面已经不需要在config文件中注入logic插件了,低于3.x的版本还是需要进行配置。
2、需要做逻辑删除的字段,切记一定要添加@TableLogic这个注解
3、在删除的时候,虽然sql变更成了update,但是他不是真正的update,所以在前面我们介绍的自动填充(见《Mybatis plus应用(三)实现实体类自动填充cts和uts》)在delete里面是不生效的。这块因为应该是delete的时候mybatis plus没有进入调用插件的方法里面去。
最后附上本案例的源码下载,登录后即可下载。
还没有评论,来说两句吧...