mybatis 批量删除_Spring boot+Mybatisplus用AR模式实现逻辑删除操作

Mybatisplus的AR模式

Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。ActiveRecord 一直广受动态语言( PHP 、 Ruby 等)的喜爱,而 Java 作为准静态语言,对于 ActiveRecord 往往只能感叹其优雅,所以 MP 也在 AR 道路上进行了一定的探索,仅仅需要让实体类继承 Model 类且实现主键指定方法,即可开启 AR 之旅。逻辑删除

逻辑删除的本质是修改操作,所谓的逻辑删除其实并不是真正的删除,而是在表中将对应的是否删除标识(is_delete)或者说是状态字段(status)做修改操作。比如0是未删除,1是删除。在逻辑上数据是被删除的,但数据本身依然存在库中。对应的SQL语句:update 表名 set is_delete = 1 where id = 1;语句表示,在该表中将id为1的信息进行逻辑删除,那么客户端进行查询id为1的信息,服务器就不会提供信息。倘若想继续为客户端提供该信息,可将 is_delete 更改为 0 。

一般商城网站,要分析客户的数据等,都会大量使用逻辑删除,所以,这肯定是要掌握了,下面,直接上代码:

entity

@Data//对应数据库的表名@TableName("tbl_item")//继承Model类,开始AR模式public class Items extends Model{//    主键自增    @TableId(type = IdType.AUTO)    private Integer id;    private String picture;    private String name;    private Double price;    //指定逻辑字段,1表示逻辑删除状态,0表示逻辑未删除    @TableLogic    private Integer logic;}

mapper

@Repositorypublic interface ItemsMapper extends BaseMapper {}

service

@Servicepublic class ItemsService extends ServiceImpl {    @Resource    private ItemsMapper itemsMapper;    public void delete(String id){        itemsMapper.deleteById(id);        System.out.println("逻辑删除单个商品成功!");    }    public void remove(String ids) {        if (ids!=null && !ids.equals("")){            String[] idArray=ids.split(",");            itemsMapper.deleteBatchIds(Arrays.asList(idArray));            System.out.println("逻辑批量删除商品成功!");        }    }}

controller

@Controller@RequestMapping("/items")public class ItemsController {    @Resource    private ItemsService itemsService;    //显示商品列表信息    @RequestMapping("/list")    public String list(Model model){        List items = itemsService.list();        model.addAttribute("items",items);        return "item";    }    //单个删除    @ResponseBody    @RequestMapping("/delete")    public String delete(String id){        if(id!=null && !id.equals("")){            itemsService.delete(id);        }        return "success";    }    //批量删除    @ResponseBody    @RequestMapping("/remove")    public String remove(String ids){        itemsService.remove(ids);        return "success";    }}

只有一个页面是用来展示商品信息的

item.html

    商品列表
商品列表 编号 图片 名称 单价 操作

其中,有一个js文件

script.js

//删除单个商品function removeCartItem(id){    // alert(id);    var r=confirm("确定要删除该商品吗?");    //提交到后台进行异步逻辑删除    if(r){        $.ajax({            url:contextPath+'/items/delete',            data:{'id':id},            method:'post',            success:function (data) {                if (data=='success'){                    window.location.href=contextPath+'/items/list';                }            }        })     }}//批量删除商品function deleteItems() {    // var r=confirm("确定删除这些商品吗?");    // if(r){    //         alert(ids);    // }    //判断是否选择了商品    var count=0;    //存储选中的商品id    var ids='';    var cks=document.getElementsByName("cks");    for (var i=0;i

spring配置文件

application.yml

#服务器配置server:  port: 8888  servlet:    context-path: /logicspring:  datasource:    url: jdbc:mysql://127.0.0.1:3306/shopping?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Hongkong    username: root    password: 数据库密码    driver-class-name: com.mysql.cj.jdbc.Driver  mvc:    static-path-pattern: /**#Mybatisplus配置mybatis-plus:  type-aliases-package: com.wxb.logicdelete.entity    #实体类包扫描  global-config:      db-config:#        logic-delete-field: flag  #全局逻辑删除字段值 3.3.0开始支持,详情看下面。          logic-delete-value: 1 # 逻辑已删除值(默认为 1)          logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

对了,在项目启动类中还要配置mapper包扫描

package com.wxb.logicdelete;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication@MapperScan("com.wxb.logicdelete.mapper")public class LogicDeleteApplication {    public static void main(String[] args) {        SpringApplication.run(LogicDeleteApplication.class, args);    }}
1256b95d93eeb4c6fbccf69145cd1d46.gif

数据库表设计

192a04d0cbd8dcb087a1b35ec3d4e17b.png

然后,启动项目,访问,最开始应该是这样的页面

8f6b4ac331b4e0e9375aeaa4afc0d727.png

然后可以点击删除或删除选中按钮进行逻辑删除了,比如:我先删除一个iphone11之后页面就没有了

e3754beac4ea629b4f5d15d6378f54d6.png

但是数据库表中实质是更新操作,并没有删除记录,而是把逻辑字段logic的值更新为1了

3422bf7bf1f392bea2a76fb28a014c93.png

然后也可以根据复选框选中的进行批量的逻辑删除,比如,我就删掉索尼X8000G和EPSON投影仪

d444436f38b596ba1d90306d7313f8eb.png

数据库也是批量根据id进行更新

bf409d3801e5c083d15182082a794782.png

进行了两次删除之后,后台也打印了两条日志

b5d2e2d69910b0ba3ecf80c851222f6a.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值