public abstract class AbstractWrapper<T,R,Children extends AbstractWrapper<T,R,Children>> extends Wrapper<T> implements Compare<Children,R>, Nested<Children,Children>, Join<Children>, Func<Children,R>
| 限定符和类型 | 类和说明 |
|---|---|
static interface |
AbstractWrapper.DoSomething
做事函数
|
| 限定符和类型 | 字段和说明 |
|---|---|
protected MergeSegments |
expression |
protected SharedString |
lastSql |
protected SharedString |
paramAlias
其他
|
protected java.util.concurrent.atomic.AtomicInteger |
paramNameSeq
必要度量
|
protected java.util.Map<java.lang.String,java.lang.Object> |
paramNameValuePairs |
protected SharedString |
sqlComment
SQL注释
|
protected SharedString |
sqlFirst
SQL起始语句
|
protected Children |
typedThis
占位符
|
| 构造器和说明 |
|---|
AbstractWrapper() |
| 限定符和类型 | 方法和说明 |
|---|---|
protected Children |
addCondition(boolean condition,
R column,
SqlKeyword sqlKeyword,
java.lang.Object val)
普通查询条件
|
protected Children |
addNestedCondition(boolean condition,
java.util.function.Consumer<Children> consumer)
多重嵌套查询条件
|
<V> Children |
allEq(boolean condition,
java.util.function.BiPredicate<R,V> filter,
java.util.Map<R,V> params,
boolean null2IsNull)
字段过滤接口,传入多参数时允许对参数进行过滤
|
<V> Children |
allEq(boolean condition,
java.util.Map<R,V> params,
boolean null2IsNull)
map 所有非空属性等于 =
|
protected Children |
and(boolean condition)
内部自用
拼接 AND
|
Children |
and(boolean condition,
java.util.function.Consumer<Children> consumer)
AND 嵌套
例: and(i -> i.eq("name", "李白").ne("status", "活着"))
|
protected void |
appendSqlSegments(ISqlSegment... sqlSegments)
添加 where 片段
|
Children |
apply(boolean condition,
java.lang.String applySql,
java.lang.Object... values)
拼接 sql
!!
|
Children |
between(boolean condition,
R column,
java.lang.Object val1,
java.lang.Object val2)
BETWEEN 值1 AND 值2
|
void |
clear()
条件清空
|
Children |
clone() |
protected R |
columnSqlInjectFilter(R column)
字段 SQL 注入过滤处理,子类重写实现过滤逻辑
|
protected java.lang.String |
columnsToString(java.util.List<R> columns)
多字段转换为逗号 "," 分割字符串
|
protected java.lang.String |
columnsToString(R... columns)
获取 columnNames
|
protected ColumnSegment |
columnToSqlSegment(R column)
获取 columnName
|
protected java.lang.String |
columnToString(R column)
获取 columnName
|
Children |
comment(boolean condition,
java.lang.String comment)
sql 注释(会拼接在 sql 的最后面)
|
Children |
eq(boolean condition,
R column,
java.lang.Object val)
等于 =
|
Children |
exists(boolean condition,
java.lang.String existsSql,
java.lang.Object... values)
拼接 EXISTS ( sql语句 )
!!
|
Children |
first(boolean condition,
java.lang.String firstSql)
sql 起始句(会拼接在SQL语句的起始处)
|
protected java.lang.String |
formatParam(java.lang.String mapping,
java.lang.Object param)
处理入参
|
protected java.lang.String |
formatSqlMaybeWithParam(java.lang.String sqlStr,
java.lang.String mapping,
java.lang.Object... params)
格式化 sql
支持 "{0}" 这种,或者 "sql {0} sql" 这种
|
Children |
func(boolean condition,
java.util.function.Consumer<Children> consumer)
消费函数
|
Children |
ge(boolean condition,
R column,
java.lang.Object val)
大于等于 >=
|
Children |
geSql(boolean condition,
R column,
java.lang.String inValue)
字段 >= ( sql语句 )
例1: geSql("id", "1, 2, 3, 4, 5, 6")
例1: geSql("id", "select id from table where name = 'JunJun'")
|
T |
getEntity()
实体对象(子类实现)
|
java.lang.Class<T> |
getEntityClass() |
MergeSegments |
getExpression()
获取 MergeSegments
|
java.lang.String |
getParamAlias() |
java.util.Map<java.lang.String,java.lang.Object> |
getParamNameValuePairs() |
java.lang.String |
getSqlComment() |
java.lang.String |
getSqlFirst() |
java.lang.String |
getSqlSegment()
SQL 片段
|
Children |
groupBy(boolean condition,
java.util.List<R> columns)
分组:GROUP BY 字段, ...
|
Children |
groupBy(boolean condition,
R column)
分组:GROUP BY 字段, ...
|
Children |
groupBy(boolean condition,
R column,
R... columns)
分组:GROUP BY 字段, ...
|
Children |
gt(boolean condition,
R column,
java.lang.Object val)
大于 >
|
Children |
gtSql(boolean condition,
R column,
java.lang.String inValue)
字段 > ( sql语句 )
例1: gtSql("id", "1, 2, 3, 4, 5, 6")
例1: gtSql("id", "select id from table where name = 'JunJun'")
|
Children |
having(boolean condition,
java.lang.String sqlHaving,
java.lang.Object... params)
HAVING ( sql语句 )
例1: having("sum(age) > 10")
例2: having("sum(age) > {0}", 10)
|
Children |
in(boolean condition,
R column,
java.util.Collection<?> coll)
字段 IN (value.get(0), value.get(1), ...)
|
Children |
in(boolean condition,
R column,
java.lang.Object... values)
字段 IN (v0, v1, ...)
|
protected ISqlSegment |
inExpression(java.util.Collection<?> value)
获取in表达式 包含括号
|
protected ISqlSegment |
inExpression(java.lang.Object[] values)
获取in表达式 包含括号
|
protected void |
initNeed()
必要的初始化
|
Children |
inSql(boolean condition,
R column,
java.lang.String inValue)
字段 IN ( sql语句 )
!!
|
protected abstract Children |
instance()
子类返回一个自己的新对象
|
Children |
isNotNull(boolean condition,
R column)
字段 IS NOT NULL
例: isNotNull("name")
|
Children |
isNull(boolean condition,
R column)
字段 IS NULL
例: isNull("name")
|
boolean |
isUseAnnotationOrderBy()
是否使用默认注解
OrderBy 排序 |
Children |
last(boolean condition,
java.lang.String lastSql)
无视优化规则直接拼接到 sql 的最后(有sql注入的风险,请谨慎使用)
例: last("limit 1")
注意只能调用一次,多次调用以最后一次为准
|
Children |
le(boolean condition,
R column,
java.lang.Object val)
小于等于 <=
|
Children |
leSql(boolean condition,
R column,
java.lang.String inValue)
字段 <= ( sql语句 )
例1: leSql("id", "1, 2, 3, 4, 5, 6")
例1: leSql("id", "select id from table where name = 'JunJun'")
|
Children |
like(boolean condition,
R column,
java.lang.Object val)
LIKE '%值%'
|
Children |
likeLeft(boolean condition,
R column,
java.lang.Object val)
LIKE '%值'
|
Children |
likeRight(boolean condition,
R column,
java.lang.Object val)
LIKE '值%'
|
protected Children |
likeValue(boolean condition,
SqlKeyword keyword,
R column,
java.lang.Object val,
SqlLike sqlLike)
内部自用
拼接 LIKE 以及 值
|
Children |
lt(boolean condition,
R column,
java.lang.Object val)
小于 <
|
Children |
ltSql(boolean condition,
R column,
java.lang.String inValue)
字段 < ( sql语句 )
例1: ltSql("id", "1, 2, 3, 4, 5, 6")
例1: ltSql("id", "select id from table where name = 'JunJun'")
|
protected Children |
maybeDo(boolean condition,
AbstractWrapper.DoSomething something)
函数化的做事
|
Children |
ne(boolean condition,
R column,
java.lang.Object val)
不等于 <>
|
Children |
nested(boolean condition,
java.util.function.Consumer<Children> consumer)
正常嵌套 不带 AND 或者 OR
例: nested(i -> i.eq("name", "李白").ne("status", "活着"))
|
protected Children |
not(boolean condition)
内部自用
NOT 关键词
|
Children |
not(boolean condition,
java.util.function.Consumer<Children> consumer)
not嵌套
例: not(i -> i.eq("name", "李白").ne("status", "活着"))
|
Children |
notBetween(boolean condition,
R column,
java.lang.Object val1,
java.lang.Object val2)
NOT BETWEEN 值1 AND 值2
|
Children |
notExists(boolean condition,
java.lang.String existsSql,
java.lang.Object... values)
拼接 NOT EXISTS ( sql语句 )
!!
|
Children |
notIn(boolean condition,
R column,
java.util.Collection<?> coll)
字段 NOT IN (value.get(0), value.get(1), ...)
|
Children |
notIn(boolean condition,
R column,
java.lang.Object... values)
字段 NOT IN (v0, v1, ...)
|
Children |
notInSql(boolean condition,
R column,
java.lang.String inValue)
字段 NOT IN ( sql语句 )
!!
|
Children |
notLike(boolean condition,
R column,
java.lang.Object val)
NOT LIKE '%值%'
|
Children |
notLikeLeft(boolean condition,
R column,
java.lang.Object val)
NOT LIKE '%值'
|
Children |
notLikeRight(boolean condition,
R column,
java.lang.Object val)
NOT LIKE '值%'
|
Children |
or(boolean condition)
拼接 OR
|
Children |
or(boolean condition,
java.util.function.Consumer<Children> consumer)
OR 嵌套
例: or(i -> i.eq("name", "李白").ne("status", "活着"))
|
Children |
orderBy(boolean condition,
boolean isAsc,
java.util.List<R> columns)
排序:ORDER BY 字段, ...
|
Children |
orderBy(boolean condition,
boolean isAsc,
R column)
排序:ORDER BY 字段, ...
|
Children |
orderBy(boolean condition,
boolean isAsc,
R column,
R... columns)
排序:ORDER BY 字段, ...
|
Children |
setEntity(T entity) |
Children |
setEntityClass(java.lang.Class<T> entityClass) |
Children |
setParamAlias(java.lang.String paramAlias)
参数别名设置,初始化时优先设置该值、重复设置异常
|
getCustomSqlSegment, getSqlSelect, getSqlSet, getTargetSql, isEmptyOfEntity, isEmptyOfNormal, isEmptyOfWhere, nonEmptyOfEntity, nonEmptyOfNormal, nonEmptyOfWhereequals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitallEq, allEq, allEq, allEq, between, eq, ge, gt, le, like, likeLeft, likeRight, lt, ne, notBetween, notLike, notLikeLeft, notLikeRightapply, comment, exists, first, last, notExists, orfunc, geSql, groupBy, groupBy, groupBy, gtSql, having, in, in, inSql, isNotNull, isNull, leSql, ltSql, notIn, notIn, notInSql, orderByAsc, orderByAsc, orderByAsc, orderByAsc, orderByAsc, orderByAsc, orderByDesc, orderByDesc, orderByDesc, orderByDesc, orderByDesc, orderByDescprotected final Children extends AbstractWrapper<T,R,Children> typedThis
protected java.util.concurrent.atomic.AtomicInteger paramNameSeq
protected java.util.Map<java.lang.String,java.lang.Object> paramNameValuePairs
protected SharedString paramAlias
protected SharedString lastSql
protected SharedString sqlComment
protected SharedString sqlFirst
protected MergeSegments expression
public java.lang.Class<T> getEntityClass()
public <V> Children allEq(boolean condition, java.util.Map<R,V> params, boolean null2IsNull)
Comparepublic <V> Children allEq(boolean condition, java.util.function.BiPredicate<R,V> filter, java.util.Map<R,V> params, boolean null2IsNull)
Comparepublic Children like(boolean condition, R column, java.lang.Object val)
Comparepublic Children notLike(boolean condition, R column, java.lang.Object val)
Comparepublic Children likeLeft(boolean condition, R column, java.lang.Object val)
Comparepublic Children likeRight(boolean condition, R column, java.lang.Object val)
Comparepublic Children notLikeLeft(boolean condition, R column, java.lang.Object val)
ComparenotLikeLeft 在接口中 Compare<Children extends AbstractWrapper<T,R,Children>,R>public Children notLikeRight(boolean condition, R column, java.lang.Object val)
ComparenotLikeRight 在接口中 Compare<Children extends AbstractWrapper<T,R,Children>,R>public Children between(boolean condition, R column, java.lang.Object val1, java.lang.Object val2)
Comparepublic Children notBetween(boolean condition, R column, java.lang.Object val1, java.lang.Object val2)
ComparenotBetween 在接口中 Compare<Children extends AbstractWrapper<T,R,Children>,R>condition - 执行条件column - 字段val1 - 值1val2 - 值2public Children and(boolean condition, java.util.function.Consumer<Children> consumer)
Nested例: and(i -> i.eq("name", "李白").ne("status", "活着"))
public Children or(boolean condition, java.util.function.Consumer<Children> consumer)
Nested例: or(i -> i.eq("name", "李白").ne("status", "活着"))
public Children nested(boolean condition, java.util.function.Consumer<Children> consumer)
Nested例: nested(i -> i.eq("name", "李白").ne("status", "活着"))
public Children not(boolean condition, java.util.function.Consumer<Children> consumer)
Nested例: not(i -> i.eq("name", "李白").ne("status", "活着"))
public Children apply(boolean condition, java.lang.String applySql, java.lang.Object... values)
Join!! 会有 sql 注入风险 !!
例1: apply("id = 1")
例2: apply("date_format(dateColumn,'%Y-%m-%d') = '2008-08-08'")
例3: apply("date_format(dateColumn,'%Y-%m-%d') = {0}", LocalDate.now())
public Children last(boolean condition, java.lang.String lastSql)
Join例: last("limit 1")
注意只能调用一次,多次调用以最后一次为准
public Children comment(boolean condition, java.lang.String comment)
Joinpublic Children first(boolean condition, java.lang.String firstSql)
Joinpublic Children exists(boolean condition, java.lang.String existsSql, java.lang.Object... values)
Join!! sql 注入方法 !!
例: exists("select id from table where age = 1")
public Children notExists(boolean condition, java.lang.String existsSql, java.lang.Object... values)
Join!! sql 注入方法 !!
例: notExists("select id from table where age = 1")
public Children isNull(boolean condition, R column)
Func例: isNull("name")
public Children isNotNull(boolean condition, R column)
Func例: isNotNull("name")
public Children in(boolean condition, R column, java.util.Collection<?> coll)
Func例: in("id", Arrays.asList(1, 2, 3, 4, 5))
public Children in(boolean condition, R column, java.lang.Object... values)
Func例: in("id", 1, 2, 3, 4, 5)
public Children notIn(boolean condition, R column, java.util.Collection<?> coll)
Func例: notIn("id", Arrays.asList(1, 2, 3, 4, 5))
public Children notIn(boolean condition, R column, java.lang.Object... values)
Func例: notIn("id", 1, 2, 3, 4, 5)
public Children inSql(boolean condition, R column, java.lang.String inValue)
Func!! sql 注入方式的 in 方法 !!
例1: inSql("id", "1, 2, 3, 4, 5, 6")
例2: inSql("id", "select id from table where id < 3")
public Children gtSql(boolean condition, R column, java.lang.String inValue)
Func例1: gtSql("id", "1, 2, 3, 4, 5, 6")
例1: gtSql("id", "select id from table where name = 'JunJun'")
public Children geSql(boolean condition, R column, java.lang.String inValue)
Func例1: geSql("id", "1, 2, 3, 4, 5, 6")
例1: geSql("id", "select id from table where name = 'JunJun'")
public Children ltSql(boolean condition, R column, java.lang.String inValue)
Func例1: ltSql("id", "1, 2, 3, 4, 5, 6")
例1: ltSql("id", "select id from table where name = 'JunJun'")
public Children leSql(boolean condition, R column, java.lang.String inValue)
Func例1: leSql("id", "1, 2, 3, 4, 5, 6")
例1: leSql("id", "select id from table where name = 'JunJun'")
public Children notInSql(boolean condition, R column, java.lang.String inValue)
Func!! sql 注入方式的 not in 方法 !!
例1: notInSql("id", "1, 2, 3, 4, 5, 6")
例2: notInSql("id", "select id from table where id < 3")
public Children groupBy(boolean condition, R column, R... columns)
Funcpublic Children orderBy(boolean condition, boolean isAsc, R column, R... columns)
Funcpublic Children groupBy(boolean condition, R column)
Func例: groupBy("id")
public Children groupBy(boolean condition, java.util.List<R> columns)
Func例: groupBy(Arrays.asList("id", "name"))
public Children orderBy(boolean condition, boolean isAsc, R column)
Func例: orderBy(true, "id")
public Children orderBy(boolean condition, boolean isAsc, java.util.List<R> columns)
Func例: orderBy(true, Arrays.asList("id", "name"))
protected R columnSqlInjectFilter(R column)
column - 字段内容public Children having(boolean condition, java.lang.String sqlHaving, java.lang.Object... params)
Func例1: having("sum(age) > 10")
例2: having("sum(age) > {0}", 10)
public Children func(boolean condition, java.util.function.Consumer<Children> consumer)
Funcprotected Children not(boolean condition)
NOT 关键词
protected Children and(boolean condition)
拼接 AND
protected Children likeValue(boolean condition, SqlKeyword keyword, R column, java.lang.Object val, SqlLike sqlLike)
拼接 LIKE 以及 值
protected Children addCondition(boolean condition, R column, SqlKeyword sqlKeyword, java.lang.Object val)
condition - 是否执行column - 属性sqlKeyword - SQL 关键词val - 条件值protected Children addNestedCondition(boolean condition, java.util.function.Consumer<Children> consumer)
condition - 查询条件值protected abstract Children instance()
protected final java.lang.String formatSqlMaybeWithParam(java.lang.String sqlStr,
java.lang.String mapping,
java.lang.Object... params)
支持 "{0}" 这种,或者 "sql {0} sql" 这种
sqlStr - 可能是sql片段mapping - 例如: "javaType=int,jdbcType=NUMERIC,typeHandler=xxx.xxx.MyTypeHandler" 这种params - 参数protected final java.lang.String formatParam(java.lang.String mapping,
java.lang.Object param)
mapping - 例如: "javaType=int,jdbcType=NUMERIC,typeHandler=xxx.xxx.MyTypeHandler" 这种param - 参数protected final Children maybeDo(boolean condition, AbstractWrapper.DoSomething something)
condition - 做不做something - 做什么protected ISqlSegment inExpression(java.util.Collection<?> value)
value - 集合protected ISqlSegment inExpression(java.lang.Object[] values)
values - 数组protected void initNeed()
protected void appendSqlSegments(ISqlSegment... sqlSegments)
sqlSegments - ISqlSegment 数组public boolean isUseAnnotationOrderBy()
OrderBy 排序public java.lang.String getSqlSegment()
ISqlSegmentgetSqlSegment 在接口中 ISqlSegmentpublic java.lang.String getSqlComment()
getSqlComment 在类中 Wrapper<T>public java.lang.String getSqlFirst()
getSqlFirst 在类中 Wrapper<T>public MergeSegments getExpression()
WrappergetExpression 在类中 Wrapper<T>public java.util.Map<java.lang.String,java.lang.Object> getParamNameValuePairs()
public java.lang.String getParamAlias()
public Children setParamAlias(java.lang.String paramAlias)
paramAlias - 参数别名protected final ColumnSegment columnToSqlSegment(R column)
protected java.lang.String columnToString(R column)
protected java.lang.String columnsToString(R... columns)
protected java.lang.String columnsToString(java.util.List<R> columns)
columns - 多字段public Children clone()
clone 在类中 java.lang.Object