框架额外扩展 MyBatis Plus 方法
批量插入方法
- 方法名称:
kpInsertBatchSomeColumn - 作用:批量插入数据
- 说明:
MyBatis Plus自带的批量插入方法,其底层还是一条一条 INSERT 插入,不是严格意义上的批量插入。如果使用默认批量方法插入大量数据会耗时过长,所以框架提供了kpInsertBatchSomeColumn真正的批量插入方法
使用方式:
java
public void doMenuInstall(RoleMenuInstallParamPO roleMenuInstallParamPO) {
...
if (this.baseMapper.kpInsertBatchSomeColumn(roleMenuPOList) == 0)
throw new KPServiceException(ReturnFinishedMessageConstant.ERROR);
}如果大量数据插入,不同数据库参数大小限制不同,太多数据一次性插入会报错。我们提供了 KPCollectionUtil.insertBatch 方法用于大批量插入
- 参数:
- 第1个参数
baseMapper:要操作的Mapper - 第2个参数
list:要插入的数据 - 第3个参数
batchSize:每次批量插入的行数
- 第1个参数
java
public void doMenuInstall(ProjectMenuInstallParamPO projectMenuInstallParamPO) {
...
# 这样设置表示假如 projectMenuPOList 一千条,每次批量插入100条,最终会执行10次 INSERT 语句,避免数据库报错
KPCollectionUtil.insertBatch(this.baseMapper, projectMenuPOList, 100);
}物理删除单条数据
- 方法名称:
kpDeleteAllById - 作用:根据表主键物理删除数据
- 说明:框架默认所有删除方法都是逻辑删除,如果特殊情况下(例如多对多的中间表)必须物理删除,则可以使用该方法
使用方式:
java
public void doMenuInstall(ProjectMenuInstallParamPO projectMenuInstallParamPO) {
...
this.baseMapper.kpDeleteAllById(apmIds);
}批量物理删除数据
- 方法名称:
kpDeleteAllByIds - 作用:根据表主键列表批量物理删除数据
- 说明:框架默认所有删除方法都是逻辑删除,如果特殊情况下(例如多对多的中间表)必须物理删除,则可以使用该方法
使用方式:
java
public void saveOrUpdate(List<String> projectIds, RolePO rolePO) {
if (KPStringUtil.isEmpty(projectIds)) return;
//删除历史
List<String> arprIds = this.baseMapper.selectList(Wrappers.lambdaQuery(RoleProjectRelevancePO.class).in(RoleProjectRelevancePO::getRoleId, rolePO.getRoleId())).stream().map(RoleProjectRelevancePO::getArprId).collect(Collectors.toList());
if (arprIds != null && arprIds.size() != 0) this.baseMapper.kpDeleteAllByIds(arprIds);
...
}统计数量并且根据指定字段去重
- 方法名称:
kpSelectCountDistinct - 作用:统计数量并且根据指定字段去重
- 说明:统计指定表的数据
使用方式:
java
public JSONObject queryNumber() {
...
roomUserMapper.kpSelectCountDistinct("dept_id", "auth_dept")
KPRedisUtil.set(redisKey, KPJSONUtil.toJsonString(body), 2, TimeUnit.HOURS);
return body;
}