今天遇到一个问题:使用mybatis的时候,更新删除字段无效,我的写法是:
(1);
(user);
这样操作之后,发现数据库并没有更新删除字段!!!
经过查找,才发现是因为@TableLogic这个注解的原因,下边详细介绍一下这个注解。
@TableLogic注解是逻辑删除,并不会物理删除数据
效果:在字段上加上这个注解再执行BaseMapper的删除方法时,删除方法会变成修改
@TableLogic(value=“原值”,delval=“修改值”)
注解参数:
value = “” 未删除的值,默认值为0
delval = “” 删除后的值,默认值为1
使用方法:
1.在实体类属性上加@TableLogic(value=“0”,delval=“1”)
@TableLogic(value="0",delval="1")
private String isdelete;
2.删:调用BaseMapper的deleteById(id)或者调用IService的removeById(id),走Update方法
效果:
没有@TableLogic注解调用deleteById/removeById,直接删除数据。
SQL:delete from xxxtable where id = 1
有注解走Update方法
SQL:Update xxxtable set is_delete = 1 where id = 1
3.改:使用了@TableLogic注解,调用update方法,是不会将该字段放入修改字段中,而是默认添加在where条件字段中。即使你给dataStatus赋值也不能修改字段。
SQL: Update xxxtable set 字段1 = 值1,字段2 = 值2 where id = 1 and is_delete = 0
4.查:使用了@TableLogic注解,使用queryWapper等查询时,没有筛选是否删除的条件,但是sql还是自动加上了条件:SELECT * from xxxtable where is_delete =0