|
@@ -9,49 +9,38 @@ package cn.com.qmth.examcloud.core.print.common.jpa;
|
|
|
|
|
|
import java.util.Collection;
|
|
|
|
|
|
+import static cn.com.qmth.examcloud.core.print.common.jpa.SqlWrapper.Constant.*;
|
|
|
+
|
|
|
/**
|
|
|
- * 原生SQL包装类
|
|
|
+ * SQL常用的语句构建类
|
|
|
*
|
|
|
* @author: fengdesheng
|
|
|
* @since: 2018/10/17
|
|
|
*/
|
|
|
public class SqlWrapper {
|
|
|
- private static final String SELECT = "SELECT ";
|
|
|
- private static final String UPDATE = "UPDATE ";
|
|
|
- private static final String DELETE = "DELETE ";
|
|
|
- private static final String SET = " SET ";
|
|
|
- private static final String COUNT = " COUNT ";
|
|
|
- private static final String SUM = " SUM ";
|
|
|
- private static final String DISTINCT = " DISTINCT ";
|
|
|
- private static final String FROM = " FROM ";
|
|
|
- private static final String WHERE = " WHERE ";
|
|
|
- private static final String INNER_JOIN = " INNER JOIN ";
|
|
|
- private static final String LEFT_JOIN = " LEFT JOIN ";
|
|
|
- private static final String UNION_ALL = " UNION ALL ";
|
|
|
- private static final String UNION = " UNION ";
|
|
|
- private static final String ON = " ON ";
|
|
|
- private static final String AS = " AS ";
|
|
|
- private static final String AND = " AND ";
|
|
|
- private static final String OR = " OR ";
|
|
|
- private static final String LIKE = " LIKE ";
|
|
|
- private static final String IN = " IN ";
|
|
|
- private static final String NOT_IN = " NOT IN ";
|
|
|
- private static final String IS_NULL = " IS NULL ";
|
|
|
- private static final String IS_NOT_NULL = " IS NOT NULL ";
|
|
|
- private static final String GROUP_BY = " GROUP BY ";
|
|
|
- private static final String ORDER_BY = " ORDER BY ";
|
|
|
- private static final String ASC = " ASC ";
|
|
|
- private static final String DESC = " DESC ";
|
|
|
-
|
|
|
private StringBuilder sql = new StringBuilder();
|
|
|
|
|
|
+ public String build() {
|
|
|
+ return sql.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper append(String str) {
|
|
|
+ sql.append(str);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper as(String name) {
|
|
|
+ sql.append(AS).append(name);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
public SqlWrapper select() {
|
|
|
sql.append(SELECT).append("*");
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
public SqlWrapper select(String columns) {
|
|
|
- /* 多个按逗号分隔 */
|
|
|
+ /* 多个字段须按逗号分隔 */
|
|
|
sql.append(SELECT).append(columns);
|
|
|
return this;
|
|
|
}
|
|
@@ -101,6 +90,31 @@ public class SqlWrapper {
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
+ public SqlWrapper rightJoin(String tableName) {
|
|
|
+ sql.append(RIGHT_JOIN).append(tableName);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper union(String otherQuerySql) {
|
|
|
+ sql.append(UNION).append(otherQuerySql);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper unionAll(String otherQuerySql) {
|
|
|
+ sql.append(UNION_ALL).append(otherQuerySql);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper exists(String subQuerySql) {
|
|
|
+ sql.append(EXISTS).append("(").append(subQuerySql).append(")");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper notExists(String subQuerySql) {
|
|
|
+ sql.append(NOT_EXISTS).append("(").append(subQuerySql).append(")");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
public SqlWrapper on(String fieldName, String refFieldName) {
|
|
|
sql.append(ON).append(fieldName).append(" = ").append(refFieldName);
|
|
|
return this;
|
|
@@ -111,6 +125,12 @@ public class SqlWrapper {
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
+ public SqlWrapper oneEqOne() {
|
|
|
+ /* default condition */
|
|
|
+ sql.append("1=1").append(AND);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
public SqlWrapper and() {
|
|
|
sql.append(AND);
|
|
|
return this;
|
|
@@ -131,12 +151,12 @@ public class SqlWrapper {
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
- public SqlWrapper eq(String fieldName, Number value) {
|
|
|
+ public SqlWrapper eq(String fieldName, CharSequence value) {
|
|
|
sql.append(fieldName).append(" = ").append("'").append(value).append("'");
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
- public SqlWrapper eq(String fieldName, CharSequence value) {
|
|
|
+ public SqlWrapper eq(String fieldName, Number value) {
|
|
|
sql.append(fieldName).append(" = ").append("'").append(value).append("'");
|
|
|
return this;
|
|
|
}
|
|
@@ -208,13 +228,19 @@ public class SqlWrapper {
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
- public SqlWrapper isNotNull(String fieldName) {
|
|
|
+ public SqlWrapper notNull(String fieldName) {
|
|
|
sql.append(fieldName).append(IS_NOT_NULL);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
+ public SqlWrapper groupBy(String columns) {
|
|
|
+ /* 多个字段时须按逗号分隔 */
|
|
|
+ sql.append(GROUP_BY).append(columns);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
public SqlWrapper orderBy(String columns, boolean isDesc) {
|
|
|
- /* 多个按逗号分隔 */
|
|
|
+ /* 多个字段时须按逗号分隔 */
|
|
|
if (isDesc) {
|
|
|
sql.append(ORDER_BY).append(columns).append(DESC);
|
|
|
} else {
|
|
@@ -223,35 +249,20 @@ public class SqlWrapper {
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
- public SqlWrapper groupBy(String columns) {
|
|
|
- /* 多个按逗号分隔 */
|
|
|
- sql.append(GROUP_BY).append(columns);
|
|
|
+ public SqlWrapper having() {
|
|
|
+ sql.append(HAVING);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
- public SqlWrapper as(String name) {
|
|
|
- sql.append(AS).append(name);
|
|
|
- return this;
|
|
|
- }
|
|
|
-
|
|
|
- public SqlWrapper append(String str) {
|
|
|
- sql.append(str);
|
|
|
- return this;
|
|
|
- }
|
|
|
-
|
|
|
- public String build() {
|
|
|
- return sql.toString();
|
|
|
- }
|
|
|
-
|
|
|
private String spilt(Collection<?> values) {
|
|
|
if (values == null || values.size() == 0) {
|
|
|
throw new IllegalArgumentException("Values must be not empty.");
|
|
|
}
|
|
|
- int index = 0, total = values.size();
|
|
|
StringBuilder str = new StringBuilder();
|
|
|
+ int index = 0, total = values.size();
|
|
|
for (Object value : values) {
|
|
|
if (!(value instanceof CharSequence || value instanceof Number)) {
|
|
|
- throw new IllegalArgumentException("Values must be charSequence or number.");
|
|
|
+ throw new IllegalArgumentException("Values must be String or Number.");
|
|
|
}
|
|
|
str.append(value.toString());
|
|
|
if (index < (total - 1)) {
|
|
@@ -262,4 +273,37 @@ public class SqlWrapper {
|
|
|
return str.toString();
|
|
|
}
|
|
|
|
|
|
+ interface Constant {
|
|
|
+ String SELECT = " SELECT ";
|
|
|
+ String UPDATE = " UPDATE ";
|
|
|
+ String DELETE = " DELETE ";
|
|
|
+ String SET = " SET ";
|
|
|
+ String COUNT = " COUNT ";
|
|
|
+ String SUM = " SUM ";
|
|
|
+ String DISTINCT = " DISTINCT ";
|
|
|
+ String FROM = " FROM ";
|
|
|
+ String WHERE = " WHERE ";
|
|
|
+ String INNER_JOIN = " INNER JOIN ";
|
|
|
+ String RIGHT_JOIN = " RIGHT JOIN ";
|
|
|
+ String LEFT_JOIN = " LEFT JOIN ";
|
|
|
+ String UNION = " UNION ";
|
|
|
+ String UNION_ALL = " UNION ALL ";
|
|
|
+ String EXISTS = " EXISTS ";
|
|
|
+ String NOT_EXISTS = " NOT EXISTS ";
|
|
|
+ String ON = " ON ";
|
|
|
+ String AS = " AS ";
|
|
|
+ String AND = " AND ";
|
|
|
+ String OR = " OR ";
|
|
|
+ String LIKE = " LIKE ";
|
|
|
+ String IN = " IN ";
|
|
|
+ String NOT_IN = " NOT IN ";
|
|
|
+ String IS_NULL = " IS NULL ";
|
|
|
+ String IS_NOT_NULL = " IS NOT NULL ";
|
|
|
+ String GROUP_BY = " GROUP BY ";
|
|
|
+ String ORDER_BY = " ORDER BY ";
|
|
|
+ String HAVING = " HAVING ";
|
|
|
+ String ASC = " ASC ";
|
|
|
+ String DESC = " DESC ";
|
|
|
+ }
|
|
|
+
|
|
|
}
|