浏览代码

ipu-parse的示例

liutong3 5 年之前
父节点
当前提交
ed2f4ffe02
共有 2 个文件被更改,包括 127 次插入2 次删除
  1. 6 2
      ipu-db-example/pom.xml
  2. 121 0
      ipu-db-example/src/main/java/com/ai/ipu/example/db/IpuSqlParseExample.java

+ 6 - 2
ipu-db-example/pom.xml

@ -27,8 +27,12 @@
27 27
            <artifactId>ipu-database</artifactId>
28 28
            <version>${ipu}</version>
29 29
        </dependency>
30
31
30
        <!-- ipu-sql-parse(内部依赖了ipu-database,所有上面的ipu-database依赖实际可去掉) -->
31
        <dependency>
32
            <groupId>com.ai.ipu</groupId>
33
            <artifactId>ipu-sql-parse</artifactId>
34
            <version>${ipu}</version>
35
        </dependency>
32 36
        <!-- ipu-sql-mgmt(内部依赖了ipu-database,所有上面的ipu-database依赖实际可去掉) -->
33 37
        <dependency>
34 38
            <groupId>com.ai.ipu</groupId>

+ 121 - 0
ipu-db-example/src/main/java/com/ai/ipu/example/db/IpuSqlParseExample.java

@ -0,0 +1,121 @@
1
package com.ai.ipu.example.db;
2
3
import com.ai.ipu.sql.parse.statement.Select;
4
import com.ai.ipu.sql.parse.statement.Update;
5
import com.ai.ipu.sql.parse.util.SqlParser;
6
import org.junit.Test;
7
8
import java.util.*;
9
10
/**
11
 * @author liutong3
12
 * @team IPU
13
 * @date 2019/10/18 11:10
14
 */
15
public class IpuSqlParseExample {
16
    /**
17
     * 通过sql语句解析sql
18
     */
19
    @Test
20
    public void testParse() {
21
        SqlParser sqlParser = new SqlParser("select string_type, int_type from ipu_db_demo where pk = '1'");
22
        System.out.println("sql语句类型:" + sqlParser.getType());
23
        System.out.println("查询的表是:" + sqlParser.getTableName());
24
        System.out.println("查询条件是:" + sqlParser.getWhere());
25
    }
26
27
    /**
28
     * 通过sql语句以及数据库连接解析sql
29
     */
30
    @Test
31
    public void testParseWithConnName() {
32
        SqlParser sqlParser = new SqlParser("test", "select string_type, int_type from ipu_db_demo where pk = '1'");
33
        System.out.println("sql语句类型:" + sqlParser.getType());
34
        System.out.println("查询的表是:" + sqlParser.getTableName());
35
        System.out.println("查询条件是:" + sqlParser.getWhere());
36
        //与数据库不符合的表
37
        try {
38
            sqlParser = new SqlParser("test", "select string_type, int_type from a where pk = '1'");
39
            System.out.println("sql语句类型:" + sqlParser.getType());
40
            System.out.println("查询的表是:" + sqlParser.getTableName());
41
            System.out.println("查询条件是:" + sqlParser.getWhere());
42
        } catch (Exception e) {
43
            System.out.println(e);
44
        }
45
    }
46
47
    /**
48
     * 快速构建sql语句
49
     */
50
    @Test
51
    public void testCreateSql() {
52
        //拼接sql语句:根据实体IpuDbDemoDto以及pk更新ipu_db_demo的所有字段
53
        int pk = 1;
54
        Map<String, Object> input = new HashMap<String, Object>();
55
        input.put("string_type", "测试");
56
        input.put("int_type", 1);
57
        input.put("decimal_type", 1);
58
        input.put("date_type", new Date());
59
        input.put("datetime_type", new Date());
60
        input.put("null_type", "");
61
        //通过stringbuilder拼接sql
62
        StringBuilder stringBuilder = new StringBuilder("update ipu_db_demo set");
63
        boolean frist = true;
64
        for (Map.Entry<String, Object> entry : input.entrySet()) {
65
            if (frist) {
66
                stringBuilder.append(" " + entry.getKey() + " = '" + entry.getValue() + "'");
67
                frist = false;
68
            } else {
69
                stringBuilder.append(", " + entry.getKey() + " = '" + entry.getValue() + "'");
70
            }
71
        }
72
        stringBuilder.append(" where pk = " + pk);
73
        System.out.println(stringBuilder.toString());
74
        //通过ipu-sql-parse拼接sql
75
        Update update = new Update("ipu_db_demo");
76
        for (Map.Entry<String, Object> entry : input.entrySet()) {
77
            update.addColumn(entry.getKey(), "'" + entry.getValue() + "'");
78
        }
79
        update.where("pk = " + pk);
80
        System.out.println(update.getSql());
81
    }
82
83
    /**
84
     * 快速更新sql语句
85
     */
86
    @Test
87
    public void testChangeSql() {
88
        //为原sql变更查询列和查询条件
89
        String oldSql = "select string_type, int_type from ipu_db_demo where pk = '1'";
90
        List<String> selectParams = new ArrayList<String>();
91
        selectParams.add("string_type");
92
        selectParams.add("int_type");
93
        selectParams.add("decimal_type");
94
        selectParams.add("date_type");
95
        selectParams.add("datetime_type");
96
        selectParams.add("null_type");
97
        String where = "pk <> '1'";
98
        //通过string更新sql
99
        String[] list = oldSql.split("where");
100
        String newSql = list[0] + " where " + where;
101
        list = newSql.split("from");
102
        String param = "";
103
        for (String obj : selectParams) {
104
            if ("".equals(param)) {
105
                param += obj;
106
            } else {
107
                param += ", " + obj;
108
            }
109
110
        }
111
        newSql = "select " + param + list[1];
112
        System.out.println(newSql);
113
        //通过ipu-sql-parse变更sql
114
        SqlParser sqlParser = new SqlParser(oldSql);
115
        Select select = (Select) sqlParser.getStatement();
116
        select.changeAllColumns(selectParams.toArray(new String[selectParams.size()]));
117
        select.removeAllWhere();
118
        select.where(where);
119
        System.out.println(select.getSql());
120
    }
121
}