mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 00:58:24 +08:00
!414 添加在不配置 genPath 时对增量编译的支持,并在 QueryColumnBehavior 中新增条件转换功能
Merge pull request !414 from CloudPlayer/main
This commit is contained in:
commit
bf3dcbc625
@ -142,7 +142,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.EQUALS, value);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.EQUALS, value));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -150,7 +150,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.EQUALS, value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.EQUALS, value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -158,7 +158,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.EQUALS, value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.EQUALS, value).when(isEffective)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -166,7 +166,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.EQUALS, value).when(isEffective.test(value));
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.EQUALS, value).when(isEffective.test(value)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -174,7 +174,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_EQUALS, value));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -182,7 +182,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_EQUALS, value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -190,7 +190,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_EQUALS, value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -198,7 +198,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value).when(isEffective.test(value));
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_EQUALS, value).when(isEffective.test(value)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -206,7 +206,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.GT, value);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.GT, value));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -214,7 +214,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.GT, value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.GT, value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -222,7 +222,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.GT, value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.GT, value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -230,7 +230,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.GT, value).when(isEffective.test(value));
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.GT, value).when(isEffective.test(value)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -238,7 +238,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.GE, value);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.GE, value));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -246,7 +246,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.GE, value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.GE, value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -254,7 +254,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.GE, value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.GE, value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -262,7 +262,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.GE, value).when(isEffective.test(value));
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.GE, value).when(isEffective.test(value)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -270,7 +270,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LT, value);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LT, value));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -278,7 +278,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LT, value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LT, value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -286,7 +286,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LT, value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LT, value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -294,7 +294,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LT, value).when(isEffective.test(value));
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LT, value).when(isEffective.test(value)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -302,7 +302,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LE, value);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LE, value));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -310,7 +310,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LE, value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LE, value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -318,7 +318,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LE, value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LE, value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -326,7 +326,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LE, value).when(isEffective.test(value));
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LE, value).when(isEffective.test(value)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -340,10 +340,10 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
if (QueryColumnBehavior.isSmartConvertInToEquals()) {
|
||||
return QueryCondition.create(this, SqlOperator.EQUALS, value[0]);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.EQUALS, value[0]));
|
||||
}
|
||||
}
|
||||
return QueryCondition.create(this, SqlConsts.IN, value);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlConsts.IN, value));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -357,10 +357,10 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
if (QueryColumnBehavior.isSmartConvertInToEquals()) {
|
||||
return QueryCondition.create(this, SqlOperator.EQUALS, value[0]).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.EQUALS, value[0]).when(isEffective));
|
||||
}
|
||||
}
|
||||
return QueryCondition.create(this, SqlConsts.IN, value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlConsts.IN, value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -374,10 +374,10 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
if (QueryColumnBehavior.isSmartConvertInToEquals()) {
|
||||
return QueryCondition.create(this, SqlOperator.EQUALS, value[0]).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.EQUALS, value[0]).when(isEffective));
|
||||
}
|
||||
}
|
||||
return QueryCondition.create(this, SqlConsts.IN, value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlConsts.IN, value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -391,10 +391,10 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
if (QueryColumnBehavior.isSmartConvertInToEquals()) {
|
||||
return QueryCondition.create(this, SqlOperator.EQUALS, value[0]).when(isEffective.test(value));
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.EQUALS, value[0]).when(isEffective.test(value)));
|
||||
}
|
||||
}
|
||||
return QueryCondition.create(this, SqlConsts.IN, value).when(isEffective.test(value));
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlConsts.IN, value).when(isEffective.test(value)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -434,7 +434,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (queryWrapper == null) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.IN, queryWrapper);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.IN, queryWrapper));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -442,7 +442,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (queryWrapper == null) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.IN, queryWrapper).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.IN, queryWrapper).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -450,7 +450,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (queryWrapper == null) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.IN, queryWrapper).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.IN, queryWrapper).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -464,10 +464,10 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
if (QueryColumnBehavior.isSmartConvertInToEquals()) {
|
||||
return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]));
|
||||
}
|
||||
}
|
||||
return QueryCondition.create(this, SqlConsts.NOT_IN, value);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlConsts.NOT_IN, value));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -481,10 +481,10 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
if (QueryColumnBehavior.isSmartConvertInToEquals()) {
|
||||
return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]).when(isEffective));
|
||||
}
|
||||
}
|
||||
return QueryCondition.create(this, SqlConsts.NOT_IN, value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlConsts.NOT_IN, value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -498,10 +498,10 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
if (QueryColumnBehavior.isSmartConvertInToEquals()) {
|
||||
return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]).when(isEffective));
|
||||
}
|
||||
}
|
||||
return QueryCondition.create(this, SqlConsts.NOT_IN, value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlConsts.NOT_IN, value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -515,10 +515,10 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
if (QueryColumnBehavior.isSmartConvertInToEquals()) {
|
||||
return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]).when(isEffective.test(value));
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]).when(isEffective.test(value)));
|
||||
}
|
||||
}
|
||||
return QueryCondition.create(this, SqlConsts.NOT_IN, value).when(isEffective.test(value));
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlConsts.NOT_IN, value).when(isEffective.test(value)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -558,7 +558,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (queryWrapper == null) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_IN, queryWrapper);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_IN, queryWrapper));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -566,7 +566,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (queryWrapper == null) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_IN, queryWrapper).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_IN, queryWrapper).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -574,7 +574,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (queryWrapper == null) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_IN, queryWrapper).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_IN, queryWrapper).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -582,7 +582,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(start) || QueryColumnBehavior.shouldIgnoreValue(end)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end});
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end}));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -590,7 +590,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(start) || QueryColumnBehavior.shouldIgnoreValue(end)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end}).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end}).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -598,7 +598,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(start) || QueryColumnBehavior.shouldIgnoreValue(end)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end}).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end}).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -606,7 +606,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(start) || QueryColumnBehavior.shouldIgnoreValue(end)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end}).when(isEffective.test(start, end));
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end}).when(isEffective.test(start, end)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -614,7 +614,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(start) || QueryColumnBehavior.shouldIgnoreValue(end)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end});
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end}));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -622,7 +622,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(start) || QueryColumnBehavior.shouldIgnoreValue(end)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end}).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end}).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -630,7 +630,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(start) || QueryColumnBehavior.shouldIgnoreValue(end)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end}).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end}).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -638,7 +638,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(start) || QueryColumnBehavior.shouldIgnoreValue(end)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end}).when(isEffective.test(start, end));
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end}).when(isEffective.test(start, end)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -646,7 +646,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%");
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%"));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -654,7 +654,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%").when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%").when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -662,7 +662,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%").when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%").when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -670,7 +670,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%").when(isEffective.test(value));
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%").when(isEffective.test(value)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -678,7 +678,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LIKE, value + "%");
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, value + "%"));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -686,7 +686,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LIKE, value + "%").when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, value + "%").when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -694,7 +694,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LIKE, value + "%").when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, value + "%").when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -702,7 +702,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LIKE, value + "%").when(isEffective.test(value));
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, value + "%").when(isEffective.test(value)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -710,7 +710,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LIKE, "%" + value);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, "%" + value));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -718,7 +718,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LIKE, "%" + value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, "%" + value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -726,7 +726,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LIKE, "%" + value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, "%" + value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -734,7 +734,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LIKE, "%" + value).when(isEffective.test(value));
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, "%" + value).when(isEffective.test(value)));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -754,7 +754,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.LIKE, value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.LIKE, value).when(isEffective));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -782,7 +782,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%");
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%"));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -790,7 +790,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%").when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%").when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -798,7 +798,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%").when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%").when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -806,7 +806,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%").when(isEffective.test(value));
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%").when(isEffective.test(value)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -814,7 +814,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%");
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%"));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -822,7 +822,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%").when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%").when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -830,7 +830,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%").when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%").when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -838,7 +838,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%").when(isEffective.test(value));
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%").when(isEffective.test(value)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -846,7 +846,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -854,7 +854,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -862,7 +862,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -870,7 +870,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value).when(isEffective.test(value));
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value).when(isEffective.test(value)));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -890,7 +890,7 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
if (QueryColumnBehavior.shouldIgnoreValue(value)) {
|
||||
return QueryCondition.createEmpty();
|
||||
}
|
||||
return QueryCondition.create(this, SqlOperator.NOT_LIKE, value).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.NOT_LIKE, value).when(isEffective));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -915,12 +915,12 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
||||
|
||||
@Override
|
||||
public QueryCondition isNull(boolean isEffective) {
|
||||
return QueryCondition.create(this, SqlOperator.IS_NULL, null).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.IS_NULL, null).when(isEffective));
|
||||
}
|
||||
|
||||
@Override
|
||||
public QueryCondition isNotNull(boolean isEffective) {
|
||||
return QueryCondition.create(this, SqlOperator.IS_NOT_NULL, null).when(isEffective);
|
||||
return QueryColumnBehavior.castCondition(QueryCondition.create(this, SqlOperator.IS_NOT_NULL, null).when(isEffective));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -15,7 +15,12 @@
|
||||
*/
|
||||
package com.mybatisflex.core.query;
|
||||
|
||||
import com.mybatisflex.core.constant.SqlConsts;
|
||||
import com.mybatisflex.core.constant.SqlOperator;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
/**
|
||||
@ -23,6 +28,7 @@ import java.util.function.Predicate;
|
||||
*
|
||||
* @author michael
|
||||
* @author 王帅
|
||||
* @author CloudPlayer
|
||||
*/
|
||||
public class QueryColumnBehavior {
|
||||
|
||||
@ -36,11 +42,54 @@ public class QueryColumnBehavior {
|
||||
public static final Predicate<Object> IGNORE_EMPTY = o -> o == null || "".equals(o);
|
||||
public static final Predicate<Object> IGNORE_BLANK = o -> o == null || "".equals(o.toString().trim());
|
||||
|
||||
/**
|
||||
* 在满足输入的数组或可迭代对象中的容量为 1 (即只有一个元素)时,自动将条件中的 in 转换为 =
|
||||
*/
|
||||
public static final Function<? super QueryCondition, ? extends QueryCondition> CONVERT_IN_TO_EQUALS = it -> {
|
||||
Object value = it.value;
|
||||
if (it.logic.equalsIgnoreCase(SqlConsts.IN) || it.logic.equalsIgnoreCase(SqlConsts.NOT_IN)) {
|
||||
Object firstValue;
|
||||
if (value instanceof Iterable<?>) {
|
||||
Iterator<?> iter = ((Iterable<?>) value).iterator();
|
||||
if (!iter.hasNext()) { // 没有元素,直接返回原条件
|
||||
return it;
|
||||
}
|
||||
firstValue = iter.next(); // 取第一个元素
|
||||
if (iter.hasNext()) { // 如果有后续元素,则直接返回原条件
|
||||
return it;
|
||||
}
|
||||
} else if (value instanceof Object[]) {
|
||||
Object[] array = (Object[]) value;
|
||||
if (array.length != 1) { // 如果不是单元素的数组就直接返回
|
||||
return it;
|
||||
}
|
||||
firstValue = array[0]; // 取第一个元素
|
||||
} else {
|
||||
return it;
|
||||
}
|
||||
|
||||
SqlOperator operator = it.logic.equalsIgnoreCase(SqlConsts.IN) ? SqlOperator.EQUALS : SqlOperator.NOT_EQUALS;
|
||||
return QueryCondition.create(it.column, operator, firstValue); // 将 in 转换为 =
|
||||
} else {
|
||||
return it;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 如果使用了 = 来比较 null ,则将其转为 is null 。
|
||||
*/
|
||||
public static final Function<? super QueryCondition, ? extends QueryCondition> CONVERT_EQUALS_TO_IS_NULL = it ->
|
||||
it.value == null && it.logic.equalsIgnoreCase(SqlConsts.EQUALS) ? it.column.isNull() : it;
|
||||
/**
|
||||
* 自定义全局的自动忽略参数的方法。
|
||||
*/
|
||||
private static Predicate<Object> ignoreFunction = IGNORE_NULL;
|
||||
|
||||
/**
|
||||
* 自定义全局的自动转换条件的方法。
|
||||
*/
|
||||
private static Function<? super QueryCondition, ? extends QueryCondition> conditionCaster = Function.identity();
|
||||
|
||||
/**
|
||||
* 当 {@code IN(...)} 条件只有 1 个参数时,是否自动把的内容转换为相等。
|
||||
*/
|
||||
@ -66,4 +115,15 @@ public class QueryColumnBehavior {
|
||||
return ignoreFunction.test(value);
|
||||
}
|
||||
|
||||
public static Function<? super QueryCondition, ? extends QueryCondition> getConditionCaster() {
|
||||
return smartConvertInToEquals ? CONVERT_IN_TO_EQUALS.andThen(conditionCaster) : conditionCaster;
|
||||
}
|
||||
|
||||
public static void setConditionCaster(Function<? super QueryCondition, ? extends QueryCondition> conditionCaster) {
|
||||
QueryColumnBehavior.conditionCaster = conditionCaster;
|
||||
}
|
||||
|
||||
public static QueryCondition castCondition(QueryCondition condition) {
|
||||
return getConditionCaster().apply(condition);
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,14 +17,19 @@
|
||||
package com.mybatisflex.coretest;
|
||||
|
||||
import com.mybatisflex.core.constant.SqlConnector;
|
||||
import com.mybatisflex.core.constant.SqlOperator;
|
||||
import com.mybatisflex.core.query.*;
|
||||
import com.mybatisflex.core.util.StringUtil;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import static com.mybatisflex.core.query.QueryColumnBehavior.CONVERT_EQUALS_TO_IS_NULL;
|
||||
import static com.mybatisflex.core.query.QueryColumnBehavior.getConditionCaster;
|
||||
import static com.mybatisflex.core.query.QueryMethods.bracket;
|
||||
import static com.mybatisflex.core.query.QueryMethods.raw;
|
||||
import static com.mybatisflex.coretest.table.AccountTableDef.ACCOUNT;
|
||||
@ -227,4 +232,80 @@ public class DynamicConditionTest {
|
||||
System.out.println(qw.toSQL());
|
||||
}
|
||||
|
||||
|
||||
private void assertConditionEquals(QueryCondition expect, QueryCondition actual) {
|
||||
Assert.assertEquals(expect.getColumn(), actual.getColumn());
|
||||
Assert.assertEquals(expect.getLogic(), actual.getLogic());
|
||||
Assert.assertEquals(expect.getValue(), actual.getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCastFunction1() {
|
||||
QueryCondition condition = QueryCondition.create(new QueryColumn("id"), SqlOperator.IN, new Object[] {null});
|
||||
Assert.assertSame(condition, getConditionCaster().apply(condition));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCastFunction2() {
|
||||
QueryColumn column = new QueryColumn("id");
|
||||
QueryColumnBehavior.setConditionCaster(CONVERT_EQUALS_TO_IS_NULL);
|
||||
|
||||
QueryCondition condition = QueryCondition.create(column, SqlOperator.EQUALS, null);
|
||||
QueryCondition expect = column.isNull();
|
||||
QueryCondition actual = getConditionCaster().apply(condition);
|
||||
|
||||
assertConditionEquals(expect, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCastFunction3() {
|
||||
QueryColumn column = new QueryColumn("id");
|
||||
QueryColumnBehavior.setConditionCaster(CONVERT_EQUALS_TO_IS_NULL);
|
||||
QueryColumnBehavior.setSmartConvertInToEquals(true);
|
||||
|
||||
QueryCondition condition = QueryCondition.create(column, SqlOperator.EQUALS, null);
|
||||
QueryCondition expect = column.isNull();
|
||||
QueryCondition actual = getConditionCaster().apply(condition);
|
||||
|
||||
assertConditionEquals(expect, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCastFunction4() {
|
||||
QueryColumn column = new QueryColumn("id");
|
||||
QueryColumnBehavior.setConditionCaster(CONVERT_EQUALS_TO_IS_NULL);
|
||||
QueryColumnBehavior.setSmartConvertInToEquals(true);
|
||||
|
||||
QueryCondition condition = QueryCondition.create(column, SqlOperator.IN, new Object[] { 1 });
|
||||
QueryCondition expect = QueryCondition.create(column, SqlOperator.EQUALS, 1);
|
||||
QueryCondition actual = getConditionCaster().apply(condition);
|
||||
|
||||
assertConditionEquals(expect, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCastFunction5() {
|
||||
QueryColumn column = new QueryColumn("id");
|
||||
QueryColumnBehavior.setConditionCaster(CONVERT_EQUALS_TO_IS_NULL);
|
||||
QueryColumnBehavior.setSmartConvertInToEquals(true);
|
||||
|
||||
QueryCondition condition = QueryCondition.create(column, SqlOperator.IN, new Object[] { null });
|
||||
QueryCondition expect = column.isNull();
|
||||
QueryCondition actual = getConditionCaster().apply(condition);
|
||||
|
||||
assertConditionEquals(expect, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCastFunction6() {
|
||||
QueryColumn column = new QueryColumn("id");
|
||||
QueryColumnBehavior.setConditionCaster(CONVERT_EQUALS_TO_IS_NULL);
|
||||
QueryColumnBehavior.setSmartConvertInToEquals(true);
|
||||
|
||||
QueryCondition condition = QueryCondition.create(column, SqlOperator.IN, Collections.singletonList(null));
|
||||
QueryCondition expect = column.isNull();
|
||||
QueryCondition actual = getConditionCaster().apply(condition);
|
||||
|
||||
assertConditionEquals(expect, actual);
|
||||
}
|
||||
}
|
||||
|
||||
@ -39,10 +39,7 @@ import javax.lang.model.type.TypeMirror;
|
||||
import javax.lang.model.util.Elements;
|
||||
import javax.lang.model.util.Types;
|
||||
import javax.tools.JavaFileObject;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.Writer;
|
||||
import java.io.*;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.sql.Time;
|
||||
@ -50,12 +47,11 @@ import java.sql.Timestamp;
|
||||
import java.time.*;
|
||||
import java.time.chrono.JapaneseDate;
|
||||
import java.util.*;
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
/**
|
||||
* MyBatis Flex Processor.
|
||||
*
|
||||
* @author 王帅
|
||||
* @author 王帅, CloudPlayer
|
||||
* @since 2023-06-22
|
||||
*/
|
||||
public class MybatisFlexProcessor extends AbstractProcessor {
|
||||
@ -140,13 +136,8 @@ public class MybatisFlexProcessor extends AbstractProcessor {
|
||||
// 获取需要生成的类,开始构建文件
|
||||
Set<? extends Element> elementsAnnotatedWith = roundEnv.getElementsAnnotatedWith(Table.class);
|
||||
|
||||
int size = elementsAnnotatedWith.size();
|
||||
int index = 0;
|
||||
|
||||
for (Element entityClassElement : elementsAnnotatedWith) {
|
||||
|
||||
index++;
|
||||
|
||||
// 获取 Table 注解
|
||||
Table table = entityClassElement.getAnnotation(Table.class);
|
||||
|
||||
@ -189,7 +180,8 @@ public class MybatisFlexProcessor extends AbstractProcessor {
|
||||
String tableDefClassName = entityClassName.concat(tableDefClassSuffix);
|
||||
String tableDefContent = ContentBuilder.buildTableDef(tableInfo, allInTablesEnable, tableDefPackage, tableDefClassName
|
||||
, tableDefPropertiesNameStyle, tableDefInstanceSuffix, columnInfos, defaultColumns);
|
||||
processGenClass(genPath, tableDefPackage, tableDefClassName, tableDefContent);
|
||||
// 将文件所依赖的 Element 传入 Filer 中,表示此 TableDef 依赖这个类,以保证增量编译时不丢失内容。
|
||||
processGenClass(genPath, tableDefPackage, tableDefClassName, tableDefContent, entityClassElement);
|
||||
|
||||
if (allInTablesEnable) {
|
||||
// 标记 entity 类,如果没有配置 Tables 生成位置,以 entity 位置为准
|
||||
@ -204,18 +196,18 @@ public class MybatisFlexProcessor extends AbstractProcessor {
|
||||
String mapperClassName = entityClassName.concat("Mapper");
|
||||
boolean mapperAnnotationEnable = "true".equalsIgnoreCase(mapperAnnotation);
|
||||
String mapperClassContent = ContentBuilder.buildMapper(tableInfo, realMapperPackage, mapperClassName, mapperBaseClass, mapperAnnotationEnable);
|
||||
processGenClass(genPath, realMapperPackage, mapperClassName, mapperClassContent);
|
||||
}
|
||||
|
||||
// handle NPE, ensure TableDef already generate.
|
||||
if (index == size && allInTablesEnable) {
|
||||
// 生成 Tables 文件
|
||||
String realTablesPackage = StrUtil.isBlank(allInTablesPackage) ? StrUtil.buildTableDefPackage(entityClassReference) : allInTablesPackage;
|
||||
String realTablesClassName = StrUtil.isBlank(allInTablesClassName) ? "Tables" : allInTablesClassName;
|
||||
String tablesContent = ContentBuilder.buildTables(importBuilder, fieldBuilder, realTablesPackage, allInTablesClassName);
|
||||
processGenClass(genPath, realTablesPackage, realTablesClassName, tablesContent);
|
||||
// 生成的 Mapper 依赖于此 Element。
|
||||
processGenClass(genPath, realMapperPackage, mapperClassName, mapperClassContent, entityClassElement);
|
||||
}
|
||||
}
|
||||
// 确定了要生成 Tables 类,且拥有至少一个被 Table 注解的类时再生成 Tables 类。
|
||||
if (allInTablesEnable && entityClassReference != null) {
|
||||
// 生成 Tables 文件
|
||||
String realTablesPackage = StrUtil.isBlank(allInTablesPackage) ? StrUtil.buildTableDefPackage(entityClassReference) : allInTablesPackage;
|
||||
String realTablesClassName = StrUtil.isBlank(allInTablesClassName) ? "Tables" : allInTablesClassName;
|
||||
String tablesContent = ContentBuilder.buildTables(importBuilder, fieldBuilder, realTablesPackage, allInTablesClassName);
|
||||
processGenClass(genPath, realTablesPackage, realTablesClassName, tablesContent, elementsAnnotatedWith.toArray(new Element[0]));
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -259,7 +251,7 @@ public class MybatisFlexProcessor extends AbstractProcessor {
|
||||
final String[] typeHandlerClass = {""};
|
||||
List<? extends AnnotationMirror> annotationMirrors = fieldElement.getAnnotationMirrors();
|
||||
for (AnnotationMirror annotationMirror : annotationMirrors) {
|
||||
annotationMirror.getElementValues().forEach((BiConsumer<ExecutableElement, AnnotationValue>) (executableElement, annotationValue) -> {
|
||||
annotationMirror.getElementValues().forEach((executableElement, annotationValue) -> {
|
||||
if ("typeHandler".contentEquals(executableElement.getSimpleName())) {
|
||||
typeHandlerClass[0] = annotationValue.toString();
|
||||
}
|
||||
@ -346,12 +338,12 @@ public class MybatisFlexProcessor extends AbstractProcessor {
|
||||
}
|
||||
|
||||
|
||||
private void processGenClass(String genBasePath, String genPackageName, String className, String genContent) {
|
||||
private void processGenClass(String genBasePath, String genPackageName, String className, String genContent, Element... elements) {
|
||||
Writer writer = null;
|
||||
try {
|
||||
JavaFileObject sourceFile = filer.createSourceFile(genPackageName + "." + className);
|
||||
JavaFileObject sourceFile = filer.createSourceFile(genPackageName + "." + className, elements);
|
||||
if (genBasePath == null || genBasePath.trim().length() == 0) {
|
||||
writer = sourceFile.openWriter();
|
||||
writer = new OutputStreamWriter(sourceFile.openOutputStream(), configuration.get(ConfigurationKey.CHARSET));
|
||||
writer.write(genContent);
|
||||
writer.flush();
|
||||
return;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user