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<T> extends IService<T> {
|
|
default long count(SFunction<T, ?> sFunction, Object value) {
|
return this.count(Wrappers.<T>lambdaQuery().eq(sFunction, value));
|
}
|
|
default long count(String colunm, Object value) {
|
return this.count(Wrappers.<T>query().eq(colunm, value));
|
}
|
|
/**
|
* 公用的 效验并生成主键是否存在
|
*
|
* @param primarySupplier 生成主键的值的 函数式编程
|
* @param countFunction 效验主键是否存在的 函数式编程
|
* <p>
|
* 参考用法: this.primaryGenerate(() -> RandomUtil.randomNumbers(9), (primary) -> this.count(UserSign.USER_NUMBER, primary))
|
* this 单指当前 IService
|
* </p>
|
*/
|
default <R> R primaryGenerate(Supplier<R> primarySupplier, Function<R, Integer> countFunction) {
|
R primary = primarySupplier.get();
|
while (countFunction.apply(primary) > 0) {
|
primary = primarySupplier.get();
|
}
|
return primary;
|
}
|
|
/**
|
* <p>
|
* {@linkplain #primaryGenerate(Supplier, Function)} 的精简版
|
* 参考用法: this.primaryGenerate(() -> RandomUtil.randomNumbers(9),UserSign.USER_NUMBER)
|
* </p>
|
*/
|
default <R> R primaryGenerate(Supplier<R> primarySupplier, String colunm) {
|
return primaryGenerate(primarySupplier, (primary) -> (int)count(colunm, primary));
|
}
|
|
default <R> R getObj(String colunm, Object value, String getColunm, Function<Object, R> function) {
|
return getObj(q().eq(colunm, value).select(getColunm), function::apply);
|
}
|
|
default QueryWrapper<T> q() {
|
return Wrappers.query();
|
}
|
|
default UpdateWrapper<T> u() {
|
return Wrappers.update();
|
}
|
|
default LambdaQueryWrapper<T> lq() {
|
return Wrappers.lambdaQuery();
|
}
|
|
default LambdaUpdateWrapper<T> lu() {
|
return Wrappers.lambdaUpdate();
|
}
|
|
}
|