框架额外扩展 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;
    }