shikeyin
2024-01-16 bc9f706372230513c201e334e285b6e45f662e11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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();
    }
 
}