您当前的位置: 首页 >  后端

java持续实践

暂无认证

  • 2浏览

    0关注

    746博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

谷粒商城43 - 后端-商品服务-API-三级分类-删除-mybatis-plus逻辑删除实现

java持续实践 发布时间:2020-08-08 09:59:06 ,浏览量:2

文章目录
      • 需求说明
      • 代码实现
      • 使用postman进行测试

需求说明

常规的删除为物理删除, 比较暴力. 使用逻辑删除的好处是可能以后要用得到某些删除的数据. 比如说 某个需求是订单编号要自增, 即使这个订单被删除了, 也要从被删除的订单编号开始递增, 这个时候逻辑删除就派上用场了. 此处用的是分类进行逻辑删除 逻辑删除 就是在数据库中 , 指定某个状态位字段 ,约定好删除和未删除的状态. 例如1是未删除, 0 是删除 . 关于mp逻辑删除的官网: mp逻辑删除

代码实现

官方文档介绍的使用方法如下. 一共只有两步, 一个是在yml中配置, 一个是在实体类上指定某个字段用于逻辑删除 在product模块的yml中配置如下. 并且配置上debug级别的日志, 用于显示sql语句

mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto  #自增主键
      logic-delete-field: flag  # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

server:
  port: 9898

logging:
  level:
    com.atguigu.gulimall: debug

在实体类中配置如下, 指定showStatus 为逻辑删除字段. 该注解的使用方法如下 : controller层修改如下 . 使用postmapping代表是post请求

/**
     * 删除
     */
    @PostMapping("/delete")
    public R delete(@RequestBody Long[] catIds){
        categoryService.removeMenuByIds(Arrays.asList(catIds));
        return R.ok();
    }

Service层如下, 由于暂时没有其他地方引用到分类, 因此无法写是否被其他地方引用的代码. 用TODO标注.

    @Override
    public void removeMenuByIds(List asList) {
        //TODO 1.检查当前删除的菜单,  是否被别的地方引用.

        //逻辑删除
        baseMapper.deleteBatchIds(asList);
    }
使用postman进行测试

在postman中 ,发送如下的post请求localhost:88/api/product/category/delete 请求参数在请求体中, 并且选择json. 填写两个分类的id .以数组发送请求 可以看到控制台打印的sql如下, 不是delete语句, 而是update语句 数据库中也把1 , 批量修改成了0 . 说明逻辑删除成功了.

关注
打赏
1658054974
查看更多评论
立即登录/注册

微信扫码登录

0.1643s