|
@@ -0,0 +1,265 @@
|
|
|
+/*
|
|
|
+ * *************************************************
|
|
|
+ * Copyright (c) 2018 QMTH. All Rights Reserved.
|
|
|
+ * Created by Deason on 2018-10-17 15:18:02.
|
|
|
+ * *************************************************
|
|
|
+ */
|
|
|
+
|
|
|
+package cn.com.qmth.examcloud.core.print.common.jpa;
|
|
|
+
|
|
|
+import java.util.Collection;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 原生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 SqlWrapper select() {
|
|
|
+ sql.append(SELECT).append("*");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper select(String columns) {
|
|
|
+ /* 多个按逗号分隔 */
|
|
|
+ sql.append(SELECT).append(columns);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper delete() {
|
|
|
+ sql.append(DELETE);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper update(String tableName) {
|
|
|
+ sql.append(UPDATE).append(tableName);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper set() {
|
|
|
+ sql.append(SET);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper count(String fieldName) {
|
|
|
+ sql.append(COUNT).append("(").append(fieldName).append(")");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper sum(String fieldName) {
|
|
|
+ sql.append(SUM).append("(").append(fieldName).append(")");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper distinct(String fieldName) {
|
|
|
+ sql.append(DISTINCT).append(fieldName);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper from(String tableName) {
|
|
|
+ sql.append(FROM).append(tableName);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper innerJoin(String tableName) {
|
|
|
+ sql.append(INNER_JOIN).append(tableName);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper leftJoin(String tableName) {
|
|
|
+ sql.append(LEFT_JOIN).append(tableName);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper on(String fieldName, String refFieldName) {
|
|
|
+ sql.append(ON).append(fieldName).append(" = ").append(refFieldName);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper where() {
|
|
|
+ sql.append(WHERE);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper and() {
|
|
|
+ sql.append(AND);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper or() {
|
|
|
+ sql.append(OR);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper like(String fieldName, CharSequence value) {
|
|
|
+ sql.append(fieldName).append(LIKE).append("'%").append(value).append("%'");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper like(String fieldName, Number value) {
|
|
|
+ sql.append(fieldName).append(LIKE).append("'%").append(value).append("%'");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper eq(String fieldName, Number value) {
|
|
|
+ sql.append(fieldName).append(" = ").append("'").append(value).append("'");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper eq(String fieldName, CharSequence value) {
|
|
|
+ sql.append(fieldName).append(" = ").append("'").append(value).append("'");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper notEq(String fieldName, CharSequence value) {
|
|
|
+ sql.append(fieldName).append(" != ").append("'").append(value).append("'");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper notEq(String fieldName, Number value) {
|
|
|
+ sql.append(fieldName).append(" != ").append("'").append(value).append("'");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper gt(String fieldName, CharSequence value) {
|
|
|
+ sql.append(fieldName).append(" > ").append("'").append(value).append("'");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper gt(String fieldName, Number value) {
|
|
|
+ sql.append(fieldName).append(" > ").append("'").append(value).append("'");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper gte(String fieldName, CharSequence value) {
|
|
|
+ sql.append(fieldName).append(" >= ").append("'").append(value).append("'");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper gte(String fieldName, Number value) {
|
|
|
+ sql.append(fieldName).append(" >= ").append("'").append(value).append("'");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper lt(String fieldName, CharSequence value) {
|
|
|
+ sql.append(fieldName).append(" < ").append("'").append(value).append("'");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper lt(String fieldName, Number value) {
|
|
|
+ sql.append(fieldName).append(" < ").append("'").append(value).append("'");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper lte(String fieldName, CharSequence value) {
|
|
|
+ sql.append(fieldName).append(" <= ").append("'").append(value).append("'");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper lte(String fieldName, Number value) {
|
|
|
+ sql.append(fieldName).append(" <= ").append("'").append(value).append("'");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper in(String fieldName, Collection<?> values) {
|
|
|
+ String str = this.spilt(values);
|
|
|
+ sql.append(fieldName).append(IN).append("(").append(str).append(")");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper notIn(String fieldName, Collection<?> values) {
|
|
|
+ String str = this.spilt(values);
|
|
|
+ sql.append(fieldName).append(NOT_IN).append("(").append(str).append(")");
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper isNull(String fieldName) {
|
|
|
+ sql.append(fieldName).append(IS_NULL);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper isNotNull(String fieldName) {
|
|
|
+ sql.append(fieldName).append(IS_NOT_NULL);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper orderBy(String columns, boolean isDesc) {
|
|
|
+ /* 多个按逗号分隔 */
|
|
|
+ if (isDesc) {
|
|
|
+ sql.append(ORDER_BY).append(columns).append(DESC);
|
|
|
+ } else {
|
|
|
+ sql.append(ORDER_BY).append(columns).append(ASC);
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper groupBy(String columns) {
|
|
|
+ /* 多个按逗号分隔 */
|
|
|
+ sql.append(GROUP_BY).append(columns);
|
|
|
+ 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();
|
|
|
+ for (Object value : values) {
|
|
|
+ if (!(value instanceof CharSequence || value instanceof Number)) {
|
|
|
+ throw new IllegalArgumentException("Values must be charSequence or number.");
|
|
|
+ }
|
|
|
+ str.append(value.toString());
|
|
|
+ if (index < (total - 1)) {
|
|
|
+ str.append(",");
|
|
|
+ }
|
|
|
+ index++;
|
|
|
+ }
|
|
|
+ return str.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+}
|