IT-KIMI_SHI\SINOIT.KIMI
2018-12-07 50eb1d766c470dc6ff927199eaee934f972a8b70
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/************************************************************************
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
 
 http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
 ************************************************************************/
package core.plugin.mybatis.dialect;
 
import core.plugin.mybatis.dialect.impl.H2Dialect;
import core.plugin.mybatis.dialect.impl.MysqlDialect;
import core.plugin.mybatis.dialect.impl.OracleDialect;
import core.plugin.mybatis.dialect.impl.SqlserverDialet;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.session.RowBounds;
 
/**
 * Created by gzy on 2016/8/16.
 */
public class SqlDialetHelper {
 
    /**
     * 获取分页查询sql
     * @param url
     * @param originalSql
     * @param rowBounds
     * @return
     */
    public static String getQuerySqlByDialet(String url, String originalSql, RowBounds rowBounds) {
        String dbType = getDbTypeByUrl(url);
        Dialect dialect = getDialetByDbType(dbType);
        String sql = dialect.getSqlWithPagination(originalSql, rowBounds);
        return sql;
    }
 
    /**
     * 获取排序sql
     * @param originalSql
     * @param sidx
     * @param sord
     * @return
     */
    public static String getOrderSql(String originalSql, String sidx, String sord){
        StringBuilder sb = new StringBuilder();
        sb.append(originalSql).append(" order by " + sidx +  " " + sord);
        return sb.toString();
    }
 
    /**
     * 获取过滤sql
     * @param originalSql
     * @param column
     * @param columnType
     * @param value
     * @param min
     * @param max
     * @return
     */
    public static String getFilterSql(String originalSql, String column, String columnType, String[] value, Integer min, Integer max){
        StringBuilder sb = new StringBuilder();
        sb.append(originalSql);
        if("text".equals(columnType)){
            for(int i=0;i<value.length;i++){
                if(i == value.length - 1){
                    sb.append(" " + column + " != " + "'" + value[i] + "'");
                }else {
                    sb.append(" " + column + " != " + "'" + value[i] + "'" + " and");
                }
            }
        }else if("number".equals(columnType)){
            sb.append(" " + column + " between " + min + " and " +max);
        }
        return sb.toString();
    }
 
    /**
     * 获取统计sql
     * @param url
     * @param originalSql
     * @return
     */
    public static String getCountSqlByDialet(String url, String originalSql) {
        String dbType = getDbTypeByUrl(url);
        Dialect dialect = getDialetByDbType(dbType);
        String sql = dialect.getSqlWithCount(originalSql);
        return sql;
    }
 
    /**
     * 根据dbType匹配Dialect
     * @param dbType
     * @return
     */
    public static Dialect getDialetByDbType(String dbType) {
        Dialect dialect = null;
        if (StringUtils.isNotBlank(dbType)) {
            if (StringUtils.equalsIgnoreCase("ORACLE", dbType)) {
                dialect = new OracleDialect();
            } else if (StringUtils.equalsIgnoreCase("H2", dbType)) {
                dialect = new H2Dialect();
            } else if (StringUtils.equalsIgnoreCase("MYSQL", dbType)) {
                dialect = new MysqlDialect();
            } else if (StringUtils.equalsIgnoreCase("SQLSERVER", dbType)) {
                dialect = new SqlserverDialet();
            } else {
                throw new RuntimeException("A404: Not Support ['" + dbType + "'] Pagination Yet!");
            }
        }
        return dialect;
    }
 
    /**
     * 根据jdbc url获取连接数据库类型
     * @param url
     * @return
     */
    public static String getDbTypeByUrl(String url) {
        String dbType = "";
        if (StringUtils.isNotBlank(url)) {
            if (url.startsWith("jdbc:oracle")) {
                dbType = "ORACLE";
            } else if (url.startsWith("jdbc:mysql")) {
                dbType = "MYSQL";
            } else if (url.startsWith("jdbc:h2")) {
                dbType = "H2";
            } else if (url.startsWith("jdbc:sqlserver")) {
                dbType = "SQLSERVER";
            }
        }
        return dbType;
    }
}