package com.iplatform.mybatis; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.extension.service.IService; import java.util.function.Function; import java.util.function.Supplier; public interface IBaseService extends IService { default long count(SFunction sFunction, Object value) { return this.count(Wrappers.lambdaQuery().eq(sFunction, value)); } default long count(String colunm, Object value) { return this.count(Wrappers.query().eq(colunm, value)); } /** * 公用的 效验并生成主键是否存在 * * @param primarySupplier 生成主键的值的 函数式编程 * @param countFunction 效验主键是否存在的 函数式编程 *

* 参考用法: this.primaryGenerate(() -> RandomUtil.randomNumbers(9), (primary) -> this.count(UserSign.USER_NUMBER, primary)) * this 单指当前 IService *

*/ default R primaryGenerate(Supplier primarySupplier, Function countFunction) { R primary = primarySupplier.get(); while (countFunction.apply(primary) > 0) { primary = primarySupplier.get(); } return primary; } /** *

* {@linkplain #primaryGenerate(Supplier, Function)} 的精简版 * 参考用法: this.primaryGenerate(() -> RandomUtil.randomNumbers(9),UserSign.USER_NUMBER) *

*/ default R primaryGenerate(Supplier primarySupplier, String colunm) { return primaryGenerate(primarySupplier, (primary) -> (int)count(colunm, primary)); } default R getObj(String colunm, Object value, String getColunm, Function function) { return getObj(q().eq(colunm, value).select(getColunm), function::apply); } default QueryWrapper q() { return Wrappers.query(); } default UpdateWrapper u() { return Wrappers.update(); } default LambdaQueryWrapper lq() { return Wrappers.lambdaQuery(); } default LambdaUpdateWrapper lu() { return Wrappers.lambdaUpdate(); } }