mybatis-plus批量删除_Mybatis Plus mapper的多种姿势删除数据

本文详细介绍了MybatisPlus的四种删除操作:1) 根据主键ID删除;2) 基于Map删除;3) 使用实体条件删除;4) 批量删除。通过实例代码展示了每种方法的使用和效果,帮助读者理解如何在实际开发中灵活运用MybatisPlus进行数据删除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis Plus的删除操作内置了4种方法,我们来演示一下Mybatis Plus的删除操作。

ee97afb4650f4e4037ccb6de832b8f3a.png

Mybatis Plus mapper的删除操作

1、根据主键ID删除指定单条数据

方法:

int deleteById(Serializable id);

代码:

    @Test    public void testDeleteById() {        System.out.println(("----- deleteById method test ------"));        List userList = userMapper.selectList(null);        System.out.println("-----删除前数据:");        userList.forEach(System.out::println);        userMapper.deleteById(5L);        System.out.println("-----删除后剩余数据:");        List userList2 = userMapper.selectList(null);        userList2.forEach(System.out::println);    }

前面已经输出了较多sql,我们这里简洁一些,只输出打印的数据

-----删除前数据:User(id=1, name=Jone, age=18, email=test1@baomidou.com)User(id=2, name=Jack, age=20, email=test2@baomidou.com)User(id=3, name=Tom, age=28, email=test3@baomidou.com)User(id=4, name=Sandy, age=21, email=test4@baomidou.com)User(id=5, name=Billie, age=24, email=test5@baomidou.com)-----删除后剩余数据:User(id=1, name=Jone, age=18, email=test1@baomidou.com)User(id=2, name=Jack, age=20, email=test2@baomidou.com)User(id=3, name=Tom, age=28, email=test3@baomidou.com)User(id=4, name=Sandy, age=21, email=test4@baomidou.com)

2、基于map中设置的key-value,删除一条或多条数据

基于map的删除,可以设置多个列作为条件,被匹配的数据都将被删除。

方法:

int deleteByMap(@Param(Constants.COLUMN_MAP) Map columnMap);

代码:

    @Test    public void testDeleteByMap() {        System.out.println(("----- deleteByMap method test ------"));        List userList = userMapper.selectList(null);        System.out.println("-----删除前数据:");        userList.forEach(System.out::println);        Map columnMap = new HashMap<>();        columnMap.put("Name","Tom");        userMapper.deleteByMap(columnMap);        System.out.println("-----删除后剩余数据:");        List userList2 = userMapper.selectList(null);        userList2.forEach(System.out::println);    }

输出:

-----删除前数据:User(id=1, name=Jone, age=18, email=test1@baomidou.com)User(id=2, name=Jack, age=20, email=test2@baomidou.com)User(id=3, name=Tom, age=28, email=test3@baomidou.com)User(id=4, name=Sandy, age=21, email=test4@baomidou.com)User(id=5, name=Billie, age=24, email=test5@baomidou.com)-----删除后剩余数据:User(id=1, name=Jone, age=18, email=test1@baomidou.com)User(id=2, name=Jack, age=20, email=test2@baomidou.com)User(id=4, name=Sandy, age=21, email=test4@baomidou.com)User(id=5, name=Billie, age=24, email=test5@baomidou.com)

3、基于一个实体作为条件,删除一条或多条数据

方法:

int delete(@Param(Constants.WRAPPER) Wrapper wrapper);

如果方法的参数设置为null,那么相当于全表删除

代码:

输出结果:

-----删除前数据:User(id=1, name=Jone, age=18, email=test1@baomidou.com)User(id=2, name=Jack, age=20, email=test2@baomidou.com)User(id=3, name=Tom, age=28, email=test3@baomidou.com)User(id=4, name=Sandy, age=21, email=test4@baomidou.com)User(id=5, name=Billie, age=24, email=test5@baomidou.com)==>  Preparing: DELETE FROM user ==> Parameters: <==    Updates: 5-----删除后剩余数据:==>  Preparing: SELECT id,name,age,email FROM user ==> Parameters: <==      Total: 0

我们从输出的日志看出:

==>  Preparing: DELETE FROM user ==> Parameters: <==    Updates: 5

sql是全表删除。

如果方法设置了实体作为参数,那就按照实体匹配,删除对应数据。

4、根据主键ID集合,批量删除数据

方法:

int deleteBatchIds(@Param(Constants.COLLECTION) Collection extends Serializable> idList);

代码:

    @Test    public void testDeleteBatchIds() {        System.out.println(("----- deleteBatchIds method test ------"));        List userList = userMapper.selectList(null);        System.out.println("-----删除前数据:");        userList.forEach(System.out::println);        List list = new ArrayList();        list.add(4L);        list.add(5L);        userMapper.deleteBatchIds(list);        System.out.println("-----删除后剩余数据:");        List userList2 = userMapper.selectList(null);        userList2.forEach(System.out::println);    }

输出:

-----删除前数据:User(id=1, name=Jone, age=18, email=test1@baomidou.com)User(id=2, name=Jack, age=20, email=test2@baomidou.com)User(id=3, name=Tom, age=28, email=test3@baomidou.com)User(id=4, name=Sandy, age=21, email=test4@baomidou.com)User(id=5, name=Billie, age=24, email=test5@baomidou.com)==>  Preparing: DELETE FROM user WHERE id IN ( ? , ? ) ==> Parameters: 4(Long), 5(Long)<==    Updates: 2-----删除后剩余数据:==>  Preparing: SELECT id,name,age,email FROM user ==> Parameters: <==    Columns: ID, NAME, AGE, EMAIL<==        Row: 1, Jone, 18, test1@baomidou.com<==        Row: 2, Jack, 20, test2@baomidou.com<==        Row: 3, Tom, 28, test3@baomidou.com<==      Total: 3User(id=1, name=Jone, age=18, email=test1@baomidou.com)User(id=2, name=Jack, age=20, email=test2@baomidou.com)User(id=3, name=Tom, age=28, email=test3@baomidou.com)
Mybatis-Plus是一个基于MyBatis的优秀持久层框架,它简化了数据库操作,并提供了诸如CRUD(Create、Read、Update、Delete)等便捷的功能。对于`tb_manufacturer`表,你可以通过以下步骤进行基本的操作: 1. **创建映射文件**:首先,你需要在项目中的Mapper包下创建一个专门处理`tb_manufacturer`的映射文件,如`ManufacturerMapper.java`。在这个文件里,你会看到一些基础的增删改查方法模板。 ```java public interface ManufacturerMapper { @Insert("INSERT INTO tb_manufacturer(name, address) VALUES(#{name}, #{address})") void insert(Manufacturer manufacturer); @Select("SELECT * FROM tb_manufacturer WHERE id = #{id}") Optional<Manufacturer> selectById(@Param("id") Long id); @Update("UPDATE tb_manufacturer SET name = #{name} WHERE id = #{id}") int updateById(Manufacturer manufacturer); @Delete("DELETE FROM tb_manufacturer WHERE id = #{id}") int deleteById(Long id); } ``` 2. **注入Mapper**:在需要操作数据的服务类或者Repository接口中,通过Spring的依赖注入机制,将`ManufacturerMapper`注入到该类中。 3. **执行操作**:现在你可以通过注入的Mapper实例直接调用上述方法来进行CRUD操作。例如: ```java @Autowired private ManufacturerMapper manufacturerMapper; // 创建一个新的制造商对象并保存 Manufacturer newManufacturer = new Manufacturer(); newManufacturer.setName("厂商名称"); newManufacturer.setAddress("厂商地址"); manufacturerMapper.insert(newManufacturer); // 根据ID查询 Optional<Manufacturer> foundManufacturer = manufacturerMapper.selectById(1L); if (foundManufacturer.isPresent()) { System.out.println(foundManufacturer.get().getName()); } // 更新记录 Manufacturer updatedManufacturer = ... // 获取更新后的对象 manufacturerMapper.updateById(updatedManufacturer); // 删除记录 manufacturerMapper.deleteById(2L); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值