|
@ -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
|
}
|