1.根据id删除

   /**
     * 根据id删除
     * @param id
     * @return sum
     */
    @RequestMapping("deleteById")
    @ResponseBody
    public int deleteById(long id){
        int sum = userMapper.deleteById(id);
        return sum;
    }

控制台打印sql = DELETE FROM user WHERE id=1260510510135164930

2.根据id批量删除

/**
 * 根据id批量删除
 * @param ids
 * @return sum
 */
@RequestMapping("deleteBatchIds")
@ResponseBody
public int deleteBatchIds(@RequestParam  List<String> ids){
    int sum = userMapper.deleteBatchIds(ids);
    return sum;
}

访问实例:http://localhost:8888/deleteBatchIds?ids=1260601936403582978,1260601938051944449,1260601939255709698
用list进行封装,多个id用逗号隔开即可
控制台打印sql = DELETE FROM user WHERE id IN (1260601936403582978,1260601938051944449 ,1260601939255709698)
Mybatis-Plus根据条件查询删除.png

3.根据条件查询删除

/**
 * 简单的条件查询删除 map封装
 */
@RequestMapping("deleteCondition")
@ResponseBody
public int deleteCondition(User user){
    HashMap<String,Object> map = new HashMap<>();
    map.put("name",user.getName());
    map.put("email",user.getEmail());

    int sum = userMapper.deleteByMap(map);
    return sum;
}

控制台打印sql = DELETE FROM user WHERE name = 宋子宪博客 AND email = blog@songzixian.com

4.逻辑删除

物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据
逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录
(1)数据库中添加 deleted字段

ALTER TABLE `表名` ADD COLUMN `deleted` boolean

Mybatis-puls逻辑删除1.png

(2)实体类添加deleted 字段
并加上@TableLogic注解 和 @TableField(fill = FieldFill.INSERT) 注解 @TableLogic这个是做逻辑删除注解

@TableLogic//逻辑删除注解
@TableField(fill = FieldFill.INSERT) //自动填充,新增数据时生效
private Integer deleted;

实体类上添加逻辑删除字段.png

(3)在MyMetaObjectHandler实现implements MetaObjectHandler类元对象处理器接口添加deletedinsert默认值

@Override
public void insertFill(MetaObject metaObject) {
    ......
    //添加上这段代码,设置添加数据时deleted自动默认值为1
    this.setFieldValByName("deleted", 0, metaObject);
}

自动填充逻辑删除字段.png

(4)application.properties 加入配置

此为默认值,如果你的默认值和mp默认的一样,该配置可无

mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

配置说明

1代表正常数据 0代表已逻辑删除,添加了逻辑删除框架以后每次查询会带上where deleted = 0这个条件进行查询,无法查询出where deleted = 1的,可以使用mybatis自己写语句去查

测试方法,随便调用框架一种删除方法都可以进行测试

   /**
     * 通过id查询
     * @param id
     * @return
     */
    @RequestMapping("selectById")
    @ResponseBody
    public User selectById(String id){
        //通过id查询 mp自带
        User user = userMapper.selectById(id);
        return user;
    }

查看数据库原来数据
逻辑删除前的默认数据.png
查看控制台打印sql日志信息
逻辑删除控制台打印.png
MyBatis Plus中查询操作也会自动添加逻辑删除字段的判断
然后测试删除方法:http://localhost:8888/deleteById?id=1260623237591724034
然后去数据库中查询删除的这条数据,就会发现改条数据的deleted = 0(正常)变为1(逻辑删除)



附件说明

逻辑删除是为了方便数据恢复和保护数据本身价值等等的一种方案,但实际就是删除。
如果你需要再查出来就不应使用逻辑删除,而是以一个状态去表示。
如: 员工离职,账号被锁定等都应该是一个状态字段,此种场景不应使用逻辑删除。

若确需查找删除数据,如老板需要查看历史所有数据的统计汇总信息,请单独手写sql。

Last modification:March 31, 2021
如果觉得这篇技术文章对你有用,请随意赞赏