@TableLogic注解说明,以及对增删改查的影响

今天遇到一个问题:使用mybatis的时候,更新删除字段无效,我的写法是:

user.setIsDelete(1);

userService.updateById(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

你可能感兴趣的:(java,数据库,开发语言)