Mybatis Plus 删除数据(超详细)

您所在的位置:网站首页 数据库删除数据代码怎么删 Mybatis Plus 删除数据(超详细)

Mybatis Plus 删除数据(超详细)

2024-07-12 22:35| 来源: 网络整理| 查看: 265

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...,点击查看项目介绍 ; 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 50w+ 字,讲解图 2200+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 1700+ 小伙伴加入学习 ,欢迎点击围观

大家好,我是小哈。

本小节中,我们将学习如何通过 Mybatis Plus 删除数据库表中的数据。

表结构

为了演示删除数据,在前面小节中,我们已经定义好了一个用于测试的用户表, 执行脚本如下:

DROP TABLE IF EXISTS user; CREATE TABLE `user` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', `name` varchar(30) NOT NULL DEFAULT '' COMMENT '姓名', `age` int(11) NULL DEFAULT NULL COMMENT '年龄', `gender` tinyint(2) NOT NULL DEFAULT 0 COMMENT '性别,0:女 1:男', PRIMARY KEY (`id`) ) COMMENT = '用户表'; 定义实体类

定义一个名为 User 实体类:

@TableName("user") public class User { /** * 主键 ID, @TableId 注解定义字段为表的主键,type 表示主键类型,IdType.AUTO 表示随着数据库 ID 自增 */ @TableId(type = IdType.AUTO) private Long id; /** * 姓名 */ private String name; /** * 年龄 */ private Integer age; /** * 性别 */ private Integer gender; }

不明白 Mybatis Plus 实体类注解的小伙伴,可参考前面小节 , 有详细解释。

开始删除数据

Mybatis Plus 对 Mapper 层和 Service 层都将常见的增删改查操作封装好了,只需简单的继承,即可轻松搞定对数据的增删改查,本文重点讲解删除数据这块。

Mapper 层

定义一个 UserMapper , 让其继承 BaseMapper :

public interface UserMapper extends BaseMapper { }

然后,注入 Mapper :

@Autowired private UserMapper userMapper;

删除相关的方法均以 delete 开头,方法如下:

解释一下每个方法的作用:

// 根据主键 ID 删除 (直接传入 ID) int deleteById(Serializable id); // 根据主键 ID 删除 (传入实体类) int deleteById(T entity); // 根据主键 ID 批量删除 int deleteBatchIds(Collection idList) // 通过 Wrapper 条件构造器删除 int delete(Wrapper queryWrapper); // 通过 Map 设置条件来删除 int deleteByMap(Map columnMap); 示例代码

根据主键 ID 删除 (直接传入 ID):

// 实际执行的 SQL : DELETE FROM user WHERE id=9 int count = userMapper.deleteById(9L); System.out.println("受影响的行数:" + count);

根据主键 ID 删除 (传入实体类):

User user = new User(); user.setId(9L); // 实际执行的 SQL : DELETE FROM user WHERE id=9 int count = userMapper.deleteById(user); System.out.println("受影响的行数:" + count);

根据主键 ID 批量删除:

// 根据 ID 批量删除 List ids = new ArrayList(); ids.add(1L); ids.add(2L); // 实际执行 SQL 为 :DELETE FROM user WHERE id IN ( 1 , 2 ) userMapper.deleteBatchIds(ids);

通过 Wrapper 条件构造器删除:

// 构造删除条件 QueryWrapper wrapper = new QueryWrapper(); wrapper.eq("name", "犬小哈1"); wrapper.eq("age", 1); // 实际执行 SQL 为 :DELETE FROM user WHERE (name = '犬小哈1' AND age = 1) userMapper.delete(wrapper); // Lambda 表达式形式 userMapper.delete(new QueryWrapper() .lambda() .eq(User::getName, "犬小哈") .eq(User::getAge, 1));

通过 Map 设置条件来删除:

// 通过 Map 设置条件来删除 Map columnMap = new HashMap(); columnMap.put("name", "犬小哈1"); columnMap.put("age", 1); int count = userMapper.deleteByMap(columnMap); System.out.println("受影响的行数:" + count);

实际执行日志如下:

Service 层

Mybatis Plus 同样也封装了通用的 Service 层 CRUD 操作,并且提供了更丰富的方法。接下来,我们上手看 Service 层的代码结构,如下图:

定义 Service 层定义 Service 层

先定义 UserService 接口 ,让其继承自 IService:

public interface UserService extends IService { }

再定义实现类 UserServiceImpl,让其继承自 ServiceImpl, 同时实现 UserService 接口,这样就可以让 UserService 拥有了基础通用的 CRUD 功能,当然,实际开发中,业务会更加复杂,就需要向 IService 接口自定义方法并实现:

@Service public class UserServiceImpl extends ServiceImpl implements UserService { }

注入 UserService :

@Autowired private UserService userService;

Service 层封装的删除方法均以 remove 开头,方法如下:

这里把常用的一些删除方法摘出来:

// 根据 entity 条件,删除记录 boolean remove(Wrapper queryWrapper); // 根据 ID 删除 boolean removeById(Serializable id); // 根据 columnMap 条件,删除记录 boolean removeByMap(Map columnMap); // 删除(根据ID 批量删除) boolean removeByIds(Collection


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3