[已解决]Mybatis-Plus删除时异常java.lang.IllegalArgumentException: argument type mismatch

项目场景:

调用Mybatis-Plus的IService.removeById方法,报错:
java.lang.IllegalArgumentException: argument type mismatch


问题描述

问题代码:

@Override
@Transactional
public void eventDelete(Integer eventId) {
    eventService.removeById(eventId);
}

原因分析:

使用removeById(Serializable id) 方法会报错,但是用removeById(T entity)方法不会报错。说明是参数Serializable id有问题。

Serializable是 Java 中的一个接口,它没有具体的方法,它只是一个标识接口。实现了 Serializable 接口的类可以被序列化和反序列化。

Java包装类型(LongInteger)也是实现了Serializable接口的,所以这个removeById方法的id传LongInteger都可以。
然后我看了一下,我这个event表对应实体类的主键:

@TableId(value = "id", type = IdType.AUTO)
private Long id;

主键是Long类型,然而这个方法的参数是Integer类型:

public void eventDelete(Integer eventId) {

}

所以问题就是参数类型不一致。


解决方案:

方案1: 使用removeById(T entity)方法,但是需要先把entity查出来。
eventService.getById(eventId),这个方法并不会因为参数类型不一样报错。

方案2: 方法参数类型与实体类的主键类型要一致。

public void eventDelete(Long eventId) {

}

不管是用哪个方案,参数类型保持一致是最基本的要求吧,一定要一致哦。

### MyBatisPlus `removeBatchByIds` 方法的用法及常见问题 #### 使用示例 在 MyBatisPlus 中,`removeBatchByIds` 是用于批量删除记录的方法。此方法接受一个集合参数,该集合中的元素表示要删除的实体 ID。 ```java import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import java.util.Arrays; import java.util.List; public class Example { public void deleteMultipleRecords() { // 假设有一个名为 UserMapper 的 Mapper 类 List<Integer> idsToDelete = Arrays.asList(1, 2, 3); int result = userMapper.deleteBatchIds(idsToDelete); // 执行批量删除操作 System.out.println("受影响的行数:" + result); } } ``` 上述代码展示了如何通过传递一组 ID 来执行批量删除操作[^1]。 #### 参数说明 - **ids**: 需要是主键类型的列表,即与数据库表中定义的主键字段类型一致。 当调用 `deleteBatchIds` 方法,传入的是待删除记录对应的唯一标识符组成的列表。这些标识符应当匹配数据表里设置为主键的那一列的数据类型。 #### 返回值解释 返回整数值代表此次 SQL 删除语句影响了多少条目。成功情况下会给出实际被移除的数量;失败则可能抛出异常或返回零值取决于具体实现逻辑以及配置环境。 #### 可能遇到的问题及其解决方案 ##### 错误消息处理不当 有可能会收到类似于 "Incorrect usage of UNION and ORDER BY" 这样的错误提示,这通常不是由 `removeBatchByIds` 函数本身引起的,而是由于查询构建过程中出现了语法上的失误所致。确保所编写的任何附加条件都遵循正确的 SQL 语法规范即可解决此类问题。 ##### 数据库连接超或其他网络相关故障 如果应用程序尝试访问远程服务器上托管的服务端点,则需确认客户端和服务端之间的通信正常无阻塞,并适当调整连接池大小和其他性能优化参数来缓解潜在瓶颈现象。 ##### 主键冲突或者其他约束违反情况 检查是否有重复项存在于所提供的 id 列表之中,亦或是存在外键关联限制阻止了某些特定记录被彻底清除掉。对于前者可通过去重预处理加以规避;至于后者往往涉及更复杂的业务流程设计考量,在编码阶段就要充分重视起来并采取相应措施予以应对。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值