大家好,我是“不想打工的码农”。
上周给一个做电商的朋友演示学生系统,他看完分页后眼睛一亮:“功能挺全!但能不能加个批量删除?我后台有几千个商品,一个个删要删到明年。”
我笑了——这不就是 MyBatis Plus 的 deleteBatchIds 的用武之地嘛!
以前没用 MP 时,我可能会傻乎乎地在 Controller 里写个 for 循环,一条条删……结果网络抖一下,删一半停了,数据还乱了。
而用 MyBatis Plus,批量操作就是一行方法调用,底层自动优化为一条 SQL,又快又安全!
一、为什么批量操作不能用“循环单删”?
很多新手会这么干:
// ❌ 千万别这么写!for (Long id : ids) { studentMapper.deleteById(id); // 发N次SQL!}问题在哪?
- 性能极差:100个ID,发100次数据库请求。
- 事务风险:中间失败,部分删除成功,部分失败,数据不一致。
- 客户体验差:等半天才删完。
而 MyBatis Plus 的批量方法,底层生成的是:
DELETE FROM student WHERE id IN (1,2,3,4,5,...)一次请求,全部搞定!
二、实战:3步实现批量删除(核心仅1行代码)
第1步:前端加“多选”和“批量删除”按钮
在你的 Vue 学生列表页面,开启表格多选:
<!-- 开启多选列 --> <!-- 其他列... --> <!-- 批量操作栏 --> 批量删除 ({{ selectedIds.length }}) [xss_clean]const selectedIds = ref([])const handleSelectionChange = (rows) => { selectedIds.value = rows.map(row => row.id)}const batchDelete = () => { if (selectedIds.value.length === 0) return if (!confirm(`确定删除 ${selectedIds.value.length} 条记录?`)) return axios.post('/student/batch-delete', selectedIds.value) .then(() => { fetchStudents() // 刷新列表 selectedIds.value = [] tableRef.value.clearSelection() // 清空前端选中状态 })}[xss_clean]第2步:后端写批量删除接口(核心!1行代码)
在 StudentController 中新增:
@PostMapping("/batch-delete")public String batchDelete(@RequestBody List ids) { // ✅ 核心就这一行! boolean success = studentMapper.deleteBatchIds(ids) > 0; return success ? "删除成功" : "删除失败";} deleteBatchIds(Collection<!--? extends Serializable--> idList)
传入 ID 列表,MP 自动拼成 IN (...) 语句,高效又安全!
第3步:测试效果
- 勾选多行学生 → 点击“批量删除” → 弹窗确认 → 数据瞬间消失!
- 后台日志只打印一条 DELETE SQL,完美!
三、进阶:批量新增 & 批量修改也一样简单!
操作 | MyBatis Plus 方法 | 示例 |
批量新增
| insertBatchSomeColumn | 需要额外配置,但原理相同 |
批量修改 | 无直接方法 | 需要自己写 XML 或用 updateBatchById(逐条更新,慎用) |
重要提醒:
对于批量修改不同字段值的场景(比如每条记录改不同的 name),MP 没有内置高效方法。此时建议:要么用原生 MyBatis 写
的 UPDATE要么引导客户“先导出Excel → 改完再导入”,更安全!
四、避坑指南:批量操作的2个生死线
- 防误删!必须加二次确认!
前端一定要有 confirm() 弹窗,后端最好再校验一下 ID 是否属于当前用户(避免越权删除)。 - ID 列表不能太大!
MySQL 的 IN (...) 有长度限制(通常几千个)。如果客户要删上万条,建议:分批次删(前端每次传1000个)或提供“按条件删除”(如“删除所有年龄<18的学生”)
五、结语:你的系统,已具备“商用级细节”
现在,你的学生管理系统已经武装到牙齿:
✅ 用户登录
✅ 条件筛选
✅ 分页加载
✅ Excel导出
✅ 批量操作
这些看似简单的功能,组合起来就是一个专业、高效、客户愿意付费的管理后台。
下次接单时,当客户说“要能批量删”,你可以自信地说:“这功能我早就做好了,直接给你用。”
我是“不想打工的码农”,一个正在用“小功能”堆砌大价值的普通人。下期见!
#mybatisplus##批量操作##Java开发##程序员副业##后端开发##管理后台##代码教程##不想打工的码农#程序员##职场#
