框架额外扩展 mybatis plus 方法
insertBatchSomeColumn
- 作用:批量插入数据
- 说明:mybatis plus 自带的批量插入方法、其底层还是一条一条insert插入 不是严格意义上的批量插入、如果使用默认批量方法插入大量方法会耗时过长。所以框架提个了 insertBatchSomeColumn 真正的批量插入方法
使用方式:
public void doMenuInstall(RoleMenuInstallParamPO roleMenuInstallParamPO) {
...
if (this.baseMapper.insertBatchSomeColumn(roleMenuPOList) == 0)
throw new KPServiceException(ReturnFinishedMessageConstant.ERROR);
}
如果大量数据插入,不同数据库参数大小限制不同 太多数据一次性插入会报错: 我们提供了KPCollectionUtil.insertBatch方法用于大批量插入
- 参数:
- 第1个参数 baseMapper 要操作的Mapper
- 第2个参数 list 要插入的数据
- 第3个参数 batchSize 每次批量插入的行数
public void doMenuInstall(ProjectMenuInstallParamPO projectMenuInstallParamPO) {
...
# 这样设置表示 假如projectMenuPOList 一千条 每次批量插入100 条 最终会执行10次insert语句 避免数据库报错
KPCollectionUtil.insertBatch(this.baseMapper, projectMenuPOList, 100);
}
deleteAllById
- 作用:根据表主键物理删除数据
- 说明:框架默认所有删除方法都是逻辑删除、如果特效情况(例如多对多的中间表)必须物理删除 则可以使用该方法 使用方式:
public void doMenuInstall(ProjectMenuInstallParamPO projectMenuInstallParamPO) {
...
this.baseMapper.deleteAllByIds(apmIds);
}
deleteAllByIds
- 作用:根据表主键列表批量物理删除数据
- 说明:框架默认所有删除方法都是逻辑删除、如果特效情况(例如多对多的中间表)必须物理删除 则可以使用该方法 使用方式:
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.deleteAllByIds(arprIds);
...
}
selectCountDistinct
- 作用:统计数量 并且根据指定字段去重
- 说明:统计指定表的数据 使用方式:
public JSONObject queryNumber() {
...
roomUserMapper.selectCountDistinct("dept_id", "auth_dept")
KPRedisUtil.set(redisKey, KPJSONUtil.toJsonString(body), 2, TimeUnit.HOURS);
return body;
}