|
@@ -32,6 +32,7 @@ import com.baomidou.mybatisplus.toolkit.MapUtils;
|
|
|
import com.baomidou.mybatisplus.toolkit.SqlUtils;
|
|
|
import com.baomidou.mybatisplus.toolkit.StringUtils;
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
* <p>
|
|
|
* 条件构造抽象类,定义T-SQL语法
|
|
@@ -69,7 +70,7 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
*/
|
|
|
protected Boolean isWhere;
|
|
|
/**
|
|
|
- * 拼接WHERE后应该是AND还是OR
|
|
|
+ * 拼接WHERE后应该是AND还是ORnull
|
|
|
*/
|
|
|
protected String AND_OR = "AND";
|
|
|
|
|
@@ -83,10 +84,7 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
}
|
|
|
|
|
|
public String getSqlSelect() {
|
|
|
- if (StringUtils.isEmpty(sqlSelect)) {
|
|
|
- return null;
|
|
|
- }
|
|
|
- return stripSqlInjection(sqlSelect);
|
|
|
+ return StringUtils.isEmpty(sqlSelect) ? null : stripSqlInjection(sqlSelect);
|
|
|
}
|
|
|
|
|
|
public Wrapper<T> setSqlSelect(String sqlSelect) {
|
|
@@ -129,11 +127,37 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
public abstract String getSqlSegment();
|
|
|
|
|
|
public String toString() {
|
|
|
+ StringBuilder sb = new StringBuilder("Wrapper<T>:");
|
|
|
String sqlSegment = getSqlSegment();
|
|
|
if (StringUtils.isNotEmpty(sqlSegment)) {
|
|
|
- sqlSegment = sqlSegment.replaceAll("#\\{" + getParamAlias() + ".paramNameValuePairs.MPGENVAL[0-9]+}", "\\?");
|
|
|
+ sb.append(getSqlSegment().replaceAll("#\\{" + getParamAlias() + ".paramNameValuePairs.MPGENVAL[0-9]+}", "\\?")).append("\n");
|
|
|
}
|
|
|
- return sqlSegment;
|
|
|
+ Object entity = getEntity();
|
|
|
+ if (entity != null) {
|
|
|
+ sb.append("entity=").append(entity.toString());
|
|
|
+ }
|
|
|
+ return sb.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * <p>
|
|
|
+ * SQL中WHERE关键字跟的条件语句
|
|
|
+ * </p>
|
|
|
+ * <p>
|
|
|
+ * eg: ew.where("name='zhangsan'").where("id={0}","123");
|
|
|
+ * <p>
|
|
|
+ * 输出: WHERE (NAME='zhangsan' AND id=123)
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param sqlWhere where语句
|
|
|
+ * @param params 参数集
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> where(boolean isAdd, String sqlWhere, Object... params) {
|
|
|
+ if (isAdd)
|
|
|
+ sql.WHERE(formatSql(sqlWhere, params));
|
|
|
+ return this;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -151,7 +175,22 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return this
|
|
|
*/
|
|
|
public Wrapper<T> where(String sqlWhere, Object... params) {
|
|
|
- sql.WHERE(formatSql(sqlWhere, params));
|
|
|
+ return where(true, sqlWhere, params);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * <p>
|
|
|
+ * 等同于SQL的"field=value"表达式
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param column
|
|
|
+ * @param params
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Wrapper<T> eq(boolean isAdd, String column, Object params) {
|
|
|
+ if (isAdd)
|
|
|
+ sql.WHERE(formatSql(String.format("%s = {0}", column), params));
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -165,7 +204,22 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return
|
|
|
*/
|
|
|
public Wrapper<T> eq(String column, Object params) {
|
|
|
- sql.WHERE(formatSql(String.format("%s = {0}", column), params));
|
|
|
+ return eq(true, column, params);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * <p>
|
|
|
+ * 等同于SQL的"field <> value"表达式
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param column
|
|
|
+ * @param params
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Wrapper<T> ne(boolean isAdd, String column, Object params) {
|
|
|
+ if (isAdd)
|
|
|
+ sql.WHERE(formatSql(String.format("%s <> {0}", column), params));
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -179,8 +233,8 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return
|
|
|
*/
|
|
|
public Wrapper<T> ne(String column, Object params) {
|
|
|
- sql.WHERE(formatSql(String.format("%s <> {0}", column), params));
|
|
|
- return this;
|
|
|
+ return ne(true, column, params);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -188,12 +242,13 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* 等同于SQL的"field=value"表达式
|
|
|
* </p>
|
|
|
*
|
|
|
+ * @param isAdd
|
|
|
* @param params
|
|
|
* @return
|
|
|
*/
|
|
|
@SuppressWarnings({"rawtypes", "unchecked"})
|
|
|
- public Wrapper<T> allEq(Map<String, Object> params) {
|
|
|
- if (MapUtils.isNotEmpty(params)) {
|
|
|
+ public Wrapper<T> allEq(boolean isAdd, Map<String, Object> params) {
|
|
|
+ if (isAdd && MapUtils.isNotEmpty(params)) {
|
|
|
Iterator iterator = params.entrySet().iterator();
|
|
|
while (iterator.hasNext()) {
|
|
|
Map.Entry<String, Object> entry = (Map.Entry<String, Object>) iterator.next();
|
|
@@ -208,6 +263,35 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * <p>
|
|
|
+ * 等同于SQL的"field=value"表达式
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param params
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @SuppressWarnings({"rawtypes", "unchecked"})
|
|
|
+ public Wrapper<T> allEq(Map<String, Object> params) {
|
|
|
+ return allEq(true, params);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * <p>
|
|
|
+ * 等同于SQL的"field>value"表达式
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param column
|
|
|
+ * @param params
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Wrapper<T> gt(boolean isAdd, String column, Object params) {
|
|
|
+ if (isAdd)
|
|
|
+ sql.WHERE(formatSql(String.format("%s > {0}", column), params));
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* <p>
|
|
|
* 等同于SQL的"field>value"表达式
|
|
@@ -218,7 +302,22 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return
|
|
|
*/
|
|
|
public Wrapper<T> gt(String column, Object params) {
|
|
|
- sql.WHERE(formatSql(String.format("%s > {0}", column), params));
|
|
|
+ return gt(true, column, params);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * <p>
|
|
|
+ * 等同于SQL的"field>=value"表达式
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param column
|
|
|
+ * @param params
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Wrapper<T> ge(boolean isAdd, String column, Object params) {
|
|
|
+ if (isAdd)
|
|
|
+ sql.WHERE(formatSql(String.format("%s >= {0}", column), params));
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -232,7 +331,22 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return
|
|
|
*/
|
|
|
public Wrapper<T> ge(String column, Object params) {
|
|
|
- sql.WHERE(formatSql(String.format("%s >= {0}", column), params));
|
|
|
+ return ge(true, column, params);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * <p>
|
|
|
+ * 等同于SQL的"field<value"表达式
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param column
|
|
|
+ * @param params
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Wrapper<T> lt(boolean isAdd, String column, Object params) {
|
|
|
+ if (isAdd)
|
|
|
+ sql.WHERE(formatSql(String.format("%s < {0}", column), params));
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -246,7 +360,22 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return
|
|
|
*/
|
|
|
public Wrapper<T> lt(String column, Object params) {
|
|
|
- sql.WHERE(formatSql(String.format("%s < {0}", column), params));
|
|
|
+ return lt(true, column, params);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * <p>
|
|
|
+ * 等同于SQL的"field<=value"表达式
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param column
|
|
|
+ * @param params
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Wrapper<T> le(boolean isAdd, String column, Object params) {
|
|
|
+ if (isAdd)
|
|
|
+ sql.WHERE(formatSql(String.format("%s <= {0}", column), params));
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -260,7 +389,22 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return
|
|
|
*/
|
|
|
public Wrapper<T> le(String column, Object params) {
|
|
|
- sql.WHERE(formatSql(String.format("%s <= {0}", column), params));
|
|
|
+ return le(true, column, params);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * <p>
|
|
|
+ * AND 连接后续条件
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param sqlAnd and条件语句
|
|
|
+ * @param params 参数集
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> and(boolean isAdd, String sqlAnd, Object... params) {
|
|
|
+ if (isAdd)
|
|
|
+ sql.AND().WHERE(formatSql(sqlAnd, params));
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -274,7 +418,26 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return this
|
|
|
*/
|
|
|
public Wrapper<T> and(String sqlAnd, Object... params) {
|
|
|
- sql.AND().WHERE(formatSql(sqlAnd, params));
|
|
|
+ return and(true, sqlAnd, params);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * <p>
|
|
|
+ * 使用AND连接并换行
|
|
|
+ * </p>
|
|
|
+ * <p>
|
|
|
+ * eg: ew.where("name='zhangsan'").and("id=11").andNew("statu=1"); 输出: WHERE
|
|
|
+ * (name='zhangsan' AND id=11) AND (statu=1)
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param sqlAnd AND 条件语句
|
|
|
+ * @param params 参数值
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> andNew(boolean isAdd, String sqlAnd, Object... params) {
|
|
|
+ if (isAdd)
|
|
|
+ sql.AND_NEW().WHERE(formatSql(sqlAnd, params));
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -292,8 +455,7 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return this
|
|
|
*/
|
|
|
public Wrapper<T> andNew(String sqlAnd, Object... params) {
|
|
|
- sql.AND_NEW().WHERE(formatSql(sqlAnd, params));
|
|
|
- return this;
|
|
|
+ return andNew(true, sqlAnd, params);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -321,6 +483,26 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * <p>
|
|
|
+ * 添加OR条件
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param sqlOr or 条件语句
|
|
|
+ * @param params 参数集
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> or(boolean isAdd, String sqlOr, Object... params) {
|
|
|
+ if (isAdd) {
|
|
|
+ if (StringUtils.isEmpty(sql.toString())) {
|
|
|
+ AND_OR = "OR";
|
|
|
+ }
|
|
|
+ sql.OR().WHERE(formatSql(sqlOr, params));
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* <p>
|
|
|
* 添加OR条件
|
|
@@ -331,10 +513,30 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return this
|
|
|
*/
|
|
|
public Wrapper<T> or(String sqlOr, Object... params) {
|
|
|
- if (StringUtils.isEmpty(sql.toString())) {
|
|
|
- AND_OR = "OR";
|
|
|
+ return or(true, sqlOr, params);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * <p>
|
|
|
+ * 使用OR换行,并添加一个带()的新的条件
|
|
|
+ * </p>
|
|
|
+ * <p>
|
|
|
+ * eg: ew.where("name='zhangsan'").and("id=11").orNew("statu=1"); 输出: WHERE
|
|
|
+ * (name='zhangsan' AND id=11) OR (statu=1)
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param sqlOr AND 条件语句
|
|
|
+ * @param params 参数值
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> orNew(boolean isAdd, String sqlOr, Object... params) {
|
|
|
+ if (isAdd) {
|
|
|
+ if (StringUtils.isEmpty(sql.toString())) {
|
|
|
+ AND_OR = "OR";
|
|
|
+ }
|
|
|
+ sql.OR_NEW().WHERE(formatSql(sqlOr, params));
|
|
|
}
|
|
|
- sql.OR().WHERE(formatSql(sqlOr, params));
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -352,10 +554,24 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return this
|
|
|
*/
|
|
|
public Wrapper<T> orNew(String sqlOr, Object... params) {
|
|
|
- if (StringUtils.isEmpty(sql.toString())) {
|
|
|
- AND_OR = "OR";
|
|
|
- }
|
|
|
- sql.OR_NEW().WHERE(formatSql(sqlOr, params));
|
|
|
+ return orNew(true, sqlOr, params);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * <p>
|
|
|
+ * SQL中groupBy关键字跟的条件语句
|
|
|
+ * </p>
|
|
|
+ * <p>
|
|
|
+ * eg: ew.where("name='zhangsan'").groupBy("id,name")
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param columns SQL 中的 Group by 语句,无需输入 Group By 关键字
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> groupBy(boolean isAdd, String columns) {
|
|
|
+ if (isAdd)
|
|
|
+ sql.GROUP_BY(columns);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -371,7 +587,25 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return this
|
|
|
*/
|
|
|
public Wrapper<T> groupBy(String columns) {
|
|
|
- sql.GROUP_BY(columns);
|
|
|
+ return groupBy(true, columns);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * <p>
|
|
|
+ * SQL中having关键字跟的条件语句
|
|
|
+ * </p>
|
|
|
+ * <p>
|
|
|
+ * eg: ew.groupBy("id,name").having("id={0}",22).and("password is not null")
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param sqlHaving having关键字后面跟随的语句
|
|
|
+ * @param params 参数集
|
|
|
+ * @return EntityWrapper<T>
|
|
|
+ */
|
|
|
+ public Wrapper<T> having(boolean isAdd, String sqlHaving, Object... params) {
|
|
|
+ if (isAdd)
|
|
|
+ sql.HAVING(formatSql(sqlHaving, params));
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -388,7 +622,25 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return EntityWrapper<T>
|
|
|
*/
|
|
|
public Wrapper<T> having(String sqlHaving, Object... params) {
|
|
|
- sql.HAVING(formatSql(sqlHaving, params));
|
|
|
+ return having(true, sqlHaving, params);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * <p>
|
|
|
+ * SQL中orderby关键字跟的条件语句
|
|
|
+ * </p>
|
|
|
+ * <p>
|
|
|
+ * eg: ew.groupBy("id,name").having("id={0}",22).and("password is not null"
|
|
|
+ * ).orderBy("id,name")
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param columns SQL 中的 order by 语句,无需输入 Order By 关键字
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> orderBy(boolean isAdd, String columns) {
|
|
|
+ if (isAdd)
|
|
|
+ sql.ORDER_BY(columns);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -405,8 +657,7 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return this
|
|
|
*/
|
|
|
public Wrapper<T> orderBy(String columns) {
|
|
|
- sql.ORDER_BY(columns);
|
|
|
- return this;
|
|
|
+ return orderBy(true, columns);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -418,13 +669,40 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @param isAsc 是否为升序
|
|
|
* @return this
|
|
|
*/
|
|
|
- public Wrapper<T> orderBy(String columns, boolean isAsc) {
|
|
|
- if (StringUtils.isNotEmpty(columns)) {
|
|
|
+ public Wrapper<T> orderBy(boolean isAdd, String columns, boolean isAsc) {
|
|
|
+ if (isAdd && StringUtils.isNotEmpty(columns)) {
|
|
|
sql.ORDER_BY(columns + (isAsc ? " ASC" : " DESC"));
|
|
|
}
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * <p>
|
|
|
+ * SQL中orderby关键字跟的条件语句,可根据变更动态排序
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param columns SQL 中的 order by 语句,无需输入 Order By 关键字
|
|
|
+ * @param isAsc 是否为升序
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> orderBy(String columns, boolean isAsc) {
|
|
|
+ return orderBy(true, columns, isAsc);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * LIKE条件语句,value中无需前后%
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param column 字段名称
|
|
|
+ * @param value 匹配值
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> like(boolean isAdd, String column, String value) {
|
|
|
+ if (isAdd)
|
|
|
+ handerLike(column, value, SqlLike.DEFAULT, false);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* LIKE条件语句,value中无需前后%
|
|
|
*
|
|
@@ -433,7 +711,20 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return this
|
|
|
*/
|
|
|
public Wrapper<T> like(String column, String value) {
|
|
|
- handerLike(column, value, SqlLike.DEFAULT, false);
|
|
|
+ return like(true, column, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * NOT LIKE条件语句,value中无需前后%
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param column 字段名称
|
|
|
+ * @param value 匹配值
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> notLike(boolean isAdd, String column, String value) {
|
|
|
+ if (isAdd)
|
|
|
+ handerLike(column, value, SqlLike.DEFAULT, true);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -445,8 +736,7 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return this
|
|
|
*/
|
|
|
public Wrapper<T> notLike(String column, String value) {
|
|
|
- handerLike(column, value, SqlLike.DEFAULT, true);
|
|
|
- return this;
|
|
|
+ return notLike(true, column, value);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -468,6 +758,21 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * LIKE条件语句,value中无需前后%
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param column 字段名称
|
|
|
+ * @param value 匹配值
|
|
|
+ * @param type
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> like(boolean isAdd, String column, String value, SqlLike type) {
|
|
|
+ if (isAdd)
|
|
|
+ handerLike(column, value, type, false);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* LIKE条件语句,value中无需前后%
|
|
|
*
|
|
@@ -477,7 +782,21 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return this
|
|
|
*/
|
|
|
public Wrapper<T> like(String column, String value, SqlLike type) {
|
|
|
- handerLike(column, value, type, false);
|
|
|
+ return like(true, column, value, type);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * NOT LIKE条件语句,value中无需前后%
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param column 字段名称
|
|
|
+ * @param value 匹配值
|
|
|
+ * @param type
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> notLike(boolean isAdd, String column, String value, SqlLike type) {
|
|
|
+ if (isAdd)
|
|
|
+ handerLike(column, value, type, true);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -490,7 +809,19 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return this
|
|
|
*/
|
|
|
public Wrapper<T> notLike(String column, String value, SqlLike type) {
|
|
|
- handerLike(column, value, type, true);
|
|
|
+ return notLike(true, column, value, type);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * is not null 条件
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param columns 字段名称。多个字段以逗号分隔。
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> isNotNull(boolean isAdd, String columns) {
|
|
|
+ if (isAdd)
|
|
|
+ sql.IS_NOT_NULL(columns);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -501,7 +832,19 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return this
|
|
|
*/
|
|
|
public Wrapper<T> isNotNull(String columns) {
|
|
|
- sql.IS_NOT_NULL(columns);
|
|
|
+ return isNotNull(true, columns);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * is not null 条件
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param columns 字段名称。多个字段以逗号分隔。
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> isNull(boolean isAdd, String columns) {
|
|
|
+ if (isAdd)
|
|
|
+ sql.IS_NULL(columns);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -512,7 +855,19 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return this
|
|
|
*/
|
|
|
public Wrapper<T> isNull(String columns) {
|
|
|
- sql.IS_NULL(columns);
|
|
|
+ return isNull(true, columns);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * EXISTS 条件语句,目前适配mysql及oracle
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param value 匹配值
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> exists(boolean isAdd, String value) {
|
|
|
+ if (isAdd)
|
|
|
+ sql.EXISTS(value);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -523,7 +878,19 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return this
|
|
|
*/
|
|
|
public Wrapper<T> exists(String value) {
|
|
|
- sql.EXISTS(value);
|
|
|
+ return exists(true, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * NOT EXISTS条件语句
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param value 匹配值
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> notExists(boolean isAdd, String value) {
|
|
|
+ if (isAdd)
|
|
|
+ sql.NOT_EXISTS(value);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -534,90 +901,161 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return this
|
|
|
*/
|
|
|
public Wrapper<T> notExists(String value) {
|
|
|
- sql.NOT_EXISTS(value);
|
|
|
- return this;
|
|
|
+ return notExists(true, value);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* IN 条件语句,目前适配mysql及oracle
|
|
|
*
|
|
|
+ * @param isAdd
|
|
|
* @param column 字段名称
|
|
|
* @param value 逗号拼接的字符串
|
|
|
* @return this
|
|
|
*/
|
|
|
- public Wrapper<T> in(String column, String value) {
|
|
|
- if (StringUtils.isNotEmpty(value)) {
|
|
|
+ public Wrapper<T> in(boolean isAdd, String column, String value) {
|
|
|
+ if (isAdd && StringUtils.isNotEmpty(value)) {
|
|
|
in(column, StringUtils.splitWorker(value, ",", -1, false));
|
|
|
}
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * IN 条件语句,目前适配mysql及oracle
|
|
|
+ *
|
|
|
+ * @param column 字段名称
|
|
|
+ * @param value 逗号拼接的字符串
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> in(String column, String value) {
|
|
|
+ return in(true, column, value);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* NOT IN条件语句
|
|
|
*
|
|
|
+ * @param isAdd
|
|
|
* @param column 字段名称
|
|
|
* @param value 逗号拼接的字符串
|
|
|
* @return this
|
|
|
*/
|
|
|
- public Wrapper<T> notIn(String column, String value) {
|
|
|
- if (StringUtils.isNotEmpty(value)) {
|
|
|
+ public Wrapper<T> notIn(boolean isAdd, String column, String value) {
|
|
|
+ if (isAdd && StringUtils.isNotEmpty(value)) {
|
|
|
notIn(column, StringUtils.splitWorker(value, ",", -1, false));
|
|
|
}
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * NOT IN条件语句
|
|
|
+ *
|
|
|
+ * @param column 字段名称
|
|
|
+ * @param value 逗号拼接的字符串
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> notIn(String column, String value) {
|
|
|
+ return notIn(true, column, value);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* IN 条件语句,目前适配mysql及oracle
|
|
|
*
|
|
|
+ * @param isAdd
|
|
|
* @param column 字段名称
|
|
|
* @param value 匹配值 List集合
|
|
|
* @return this
|
|
|
*/
|
|
|
- public Wrapper<T> in(String column, Collection<?> value) {
|
|
|
- if (CollectionUtils.isNotEmpty(value))
|
|
|
+ public Wrapper<T> in(boolean isAdd, String column, Collection<?> value) {
|
|
|
+ if (isAdd && CollectionUtils.isNotEmpty(value))
|
|
|
sql.WHERE(formatSql(inExpression(column, value, false), value.toArray()));
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * IN 条件语句,目前适配mysql及oracle
|
|
|
+ *
|
|
|
+ * @param column 字段名称
|
|
|
+ * @param value 匹配值 List集合
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> in(String column, Collection<?> value) {
|
|
|
+ return in(true, column, value);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* NOT IN 条件语句,目前适配mysql及oracle
|
|
|
*
|
|
|
+ * @param isAdd
|
|
|
* @param column 字段名称
|
|
|
* @param value 匹配值 List集合
|
|
|
* @return this
|
|
|
*/
|
|
|
- public Wrapper<T> notIn(String column, Collection<?> value) {
|
|
|
- if (CollectionUtils.isNotEmpty(value))
|
|
|
+ public Wrapper<T> notIn(boolean isAdd, String column, Collection<?> value) {
|
|
|
+ if (isAdd && CollectionUtils.isNotEmpty(value))
|
|
|
sql.WHERE(formatSql(inExpression(column, value, true), value.toArray()));
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * NOT IN 条件语句,目前适配mysql及oracle
|
|
|
+ *
|
|
|
+ * @param column 字段名称
|
|
|
+ * @param value 匹配值 List集合
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> notIn(String column, Collection<?> value) {
|
|
|
+ return notIn(true, column, value);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* IN 条件语句,目前适配mysql及oracle
|
|
|
*
|
|
|
+ * @param isAdd
|
|
|
* @param column 字段名称
|
|
|
* @param value 匹配值 object数组
|
|
|
* @return this
|
|
|
*/
|
|
|
- public Wrapper<T> in(String column, Object[] value) {
|
|
|
- if (ArrayUtils.isNotEmpty(value))
|
|
|
+ public Wrapper<T> in(boolean isAdd, String column, Object[] value) {
|
|
|
+ if (isAdd && ArrayUtils.isNotEmpty(value))
|
|
|
sql.WHERE(formatSql(inExpression(column, Arrays.asList(value), false), value));
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * IN 条件语句,目前适配mysql及oracle
|
|
|
+ *
|
|
|
+ * @param column 字段名称
|
|
|
+ * @param value 匹配值 object数组
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> in(String column, Object[] value) {
|
|
|
+ return in(true, column, value);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* NOT IN 条件语句,目前适配mysql及oracle
|
|
|
*
|
|
|
+ * @param isAdd
|
|
|
* @param column 字段名称
|
|
|
* @param value 匹配值 object数组
|
|
|
* @return this
|
|
|
*/
|
|
|
- public Wrapper<T> notIn(String column, Object... value) {
|
|
|
- if (ArrayUtils.isNotEmpty(value))
|
|
|
+ public Wrapper<T> notIn(boolean isAdd, String column, Object... value) {
|
|
|
+ if (isAdd && ArrayUtils.isNotEmpty(value))
|
|
|
sql.WHERE(formatSql(inExpression(column, Arrays.asList(value), true), value));
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * NOT IN 条件语句,目前适配mysql及oracle
|
|
|
+ *
|
|
|
+ * @param column 字段名称
|
|
|
+ * @param value 匹配值 object数组
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> notIn(String column, Object... value) {
|
|
|
+ return notIn(true, column, value);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 获取in表达式
|
|
|
*
|
|
@@ -647,6 +1085,21 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * betwwee 条件语句
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param column 字段名称
|
|
|
+ * @param val1
|
|
|
+ * @param val2
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> between(boolean isAdd, String column, Object val1, Object val2) {
|
|
|
+ if (isAdd)
|
|
|
+ sql.WHERE(formatSql(String.format("%s BETWEEN {0} AND {1}", column), val1, val2));
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* betwwee 条件语句
|
|
|
*
|
|
@@ -656,7 +1109,21 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return this
|
|
|
*/
|
|
|
public Wrapper<T> between(String column, Object val1, Object val2) {
|
|
|
- sql.WHERE(formatSql(String.format("%s BETWEEN {0} AND {1}", column), val1, val2));
|
|
|
+ return between(true, column, val1, val2);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * NOT betwwee 条件语句
|
|
|
+ *
|
|
|
+ * @param isAdd
|
|
|
+ * @param column 字段名称
|
|
|
+ * @param val1
|
|
|
+ * @param val2
|
|
|
+ * @return this
|
|
|
+ */
|
|
|
+ public Wrapper<T> notBetween(boolean isAdd, String column, Object val1, Object val2) {
|
|
|
+ if (isAdd)
|
|
|
+ sql.WHERE(formatSql(String.format("%s NOT BETWEEN {0} AND {1}", column), val1, val2));
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -669,8 +1136,8 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* @return this
|
|
|
*/
|
|
|
public Wrapper<T> notBetween(String column, Object val1, Object val2) {
|
|
|
- sql.WHERE(formatSql(String.format("%s NOT BETWEEN {0} AND {1}", column), val1, val2));
|
|
|
- return this;
|
|
|
+ return notBetween(true, column, val1, val2);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -733,7 +1200,7 @@ public abstract class Wrapper<T> implements Serializable {
|
|
|
* <p>
|
|
|
* 根据需要格式化SQL<BR>
|
|
|
* <BR>
|
|
|
- * Format SQL for methods: EntityWrapper.where/and/or...("name={0}", value);
|
|
|
+ * Format SQL for methods: EntityWrapper<T>.where/and/or...("name={0}", value);
|
|
|
* ALL the {<b>i</b>} will be replaced with #{MPGENVAL<b>i</b>}<BR>
|
|
|
* <BR>
|
|
|
* ew.where("sample_name=<b>{0}</b>", "haha").and("sample_age ><b>{0}</b>
|