聚合行数重构

This commit is contained in:
admin 2021-06-02 13:32:17 +08:00
parent 52f947b477
commit 3d13c1af36
3 changed files with 133 additions and 10 deletions

View File

@ -7,5 +7,8 @@ package com.github.yulichang.wrapper.enums;
*/ */
public interface BaseFuncEnum { public interface BaseFuncEnum {
/**
* 获取sql 片段
*/
String getSql(); String getSql();
} }

View File

@ -2,10 +2,12 @@ package com.github.yulichang.wrapper.enums;
/** /**
* 常用的sql函数枚举 默认实现 * 常用的sql函数枚举 默认实现
* 可以自己实现 {@link BaseFuncEnum} 自定义函数 * 可以自己实现接口 {@link BaseFuncEnum} 自定义函数
* 目前支持一个占位符,不支持多个%s * 目前支持一个占位符,不支持多个%s
* <p> * <p>
* 只例举几个通用的,其他函数 first() last() len() ucase() lcase() 或者数据库自定义函数请自行扩展 * 只例举几个通用的,其他函数 first() last() len() ucase() lcase() 或者数据库自定义函数请自行扩展
* <p> mpj的初衷是只针对简单的连表查询,而非相对复杂的查询,
* <p> 建议慎用,复杂的查询还是推荐写sql
* *
* @author yulichang * @author yulichang
*/ */

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.github.yulichang.toolkit.LambdaUtils; import com.github.yulichang.toolkit.LambdaUtils;
import com.github.yulichang.wrapper.enums.BaseFuncEnum; import com.github.yulichang.wrapper.enums.BaseFuncEnum;
import com.github.yulichang.wrapper.enums.DefaultFuncEnum;
import java.io.Serializable; import java.io.Serializable;
import java.util.function.Predicate; import java.util.function.Predicate;
@ -13,6 +14,7 @@ import java.util.function.Predicate;
* *
* @author yulichang * @author yulichang
*/ */
@SuppressWarnings("unused")
public interface Query<Children> extends Serializable { public interface Query<Children> extends Serializable {
/** /**
@ -47,15 +49,6 @@ public interface Query<Children> extends Serializable {
<S> Children selectAs(SFunction<S, ?> column, String alias); <S> Children selectAs(SFunction<S, ?> column, String alias);
default <S, X> Children selectFunc(BaseFuncEnum funcEnum, SFunction<S, ?> column) {
return selectFunc(funcEnum, column, column);
}
default <S, X> Children selectFunc(BaseFuncEnum funcEnum, SFunction<S, ?> column, SFunction<X, ?> alias) {
return selectFunc(funcEnum, column, LambdaUtils.getName(alias));
}
/** /**
* 聚合函数查询 * 聚合函数查询
* *
@ -65,6 +58,15 @@ public interface Query<Children> extends Serializable {
*/ */
<S> Children selectFunc(BaseFuncEnum funcEnum, SFunction<S, ?> column, String alias); <S> Children selectFunc(BaseFuncEnum funcEnum, SFunction<S, ?> column, String alias);
default <S> Children selectFunc(BaseFuncEnum funcEnum, SFunction<S, ?> column) {
return selectFunc(funcEnum, column, column);
}
default <S, X> Children selectFunc(BaseFuncEnum funcEnum, SFunction<S, ?> column, SFunction<X, ?> alias) {
return selectFunc(funcEnum, column, LambdaUtils.getName(alias));
}
default <X> Children selectFunc(BaseFuncEnum funcEnum, Object column, SFunction<X, ?> alias) { default <X> Children selectFunc(BaseFuncEnum funcEnum, Object column, SFunction<X, ?> alias) {
return selectFunc(funcEnum, column, LambdaUtils.getName(alias)); return selectFunc(funcEnum, column, LambdaUtils.getName(alias));
} }
@ -75,4 +77,120 @@ public interface Query<Children> extends Serializable {
* select sql 片段 * select sql 片段
*/ */
String getSqlSelect(); String getSqlSelect();
/* 默认聚合函数扩展 */
/**
* SUM()
*/
default <S> Children selectSum(SFunction<S, ?> column) {
return selectFunc(DefaultFuncEnum.SUM, column);
}
default <X> Children selectSum(Object column, SFunction<X, ?> alias) {
return selectFunc(DefaultFuncEnum.SUM, column, alias);
}
default Children selectSum(Object column, String alias) {
return selectFunc(DefaultFuncEnum.SUM, column, alias);
}
default <S, X> Children selectSum(SFunction<S, ?> column, SFunction<X, ?> alias) {
return selectFunc(DefaultFuncEnum.SUM, column, alias);
}
/**
* COUNT()
*/
default <S> Children selectCount(SFunction<S, ?> column) {
return selectFunc(DefaultFuncEnum.COUNT, column);
}
default <X> Children selectCount(Object column, SFunction<X, ?> alias) {
return selectFunc(DefaultFuncEnum.COUNT, column, alias);
}
default Children selectCount(Object column, String alias) {
return selectFunc(DefaultFuncEnum.COUNT, column, alias);
}
default <S, X> Children selectCount(SFunction<S, ?> column, SFunction<X, ?> alias) {
return selectFunc(DefaultFuncEnum.COUNT, column, alias);
}
/**
* MAX()
*/
default <S> Children selectMAX(SFunction<S, ?> column) {
return selectFunc(DefaultFuncEnum.MAX, column);
}
default <X> Children selectMAX(Object column, SFunction<X, ?> alias) {
return selectFunc(DefaultFuncEnum.MAX, column, alias);
}
default Children selectMAX(Object column, String alias) {
return selectFunc(DefaultFuncEnum.MAX, column, alias);
}
default <S, X> Children selectMAX(SFunction<S, ?> column, SFunction<X, ?> alias) {
return selectFunc(DefaultFuncEnum.MAX, column, alias);
}
/**
* MIN()
*/
default <S> Children selectMIN(SFunction<S, ?> column) {
return selectFunc(DefaultFuncEnum.MIN, column);
}
default <X> Children selectMIN(Object column, SFunction<X, ?> alias) {
return selectFunc(DefaultFuncEnum.MIN, column, alias);
}
default Children selectMIN(Object column, String alias) {
return selectFunc(DefaultFuncEnum.MIN, column, alias);
}
default <S, X> Children selectMIN(SFunction<S, ?> column, SFunction<X, ?> alias) {
return selectFunc(DefaultFuncEnum.MIN, column, alias);
}
/**
* MIN()
*/
default <S> Children selectAVG(SFunction<S, ?> column) {
return selectFunc(DefaultFuncEnum.AVG, column);
}
default <X> Children selectAVG(Object column, SFunction<X, ?> alias) {
return selectFunc(DefaultFuncEnum.AVG, column, alias);
}
default Children selectAVG(Object column, String alias) {
return selectFunc(DefaultFuncEnum.AVG, column, alias);
}
default <S, X> Children selectAVG(SFunction<S, ?> column, SFunction<X, ?> alias) {
return selectFunc(DefaultFuncEnum.AVG, column, alias);
}
/**
* LEN()
*/
default <S> Children selectLEN(SFunction<S, ?> column) {
return selectFunc(DefaultFuncEnum.LEN, column);
}
default <X> Children selectLEN(Object column, SFunction<X, ?> alias) {
return selectFunc(DefaultFuncEnum.LEN, column, alias);
}
default Children selectLEN(Object column, String alias) {
return selectFunc(DefaultFuncEnum.LEN, column, alias);
}
default <S, X> Children selectLEN(SFunction<S, ?> column, SFunction<X, ?> alias) {
return selectFunc(DefaultFuncEnum.LEN, column, alias);
}
} }