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
package com.yanzuoguang.dao.cond;
import com.yanzuoguang.dao.DaoConst;
import com.yanzuoguang.dao.impl.SqlData;
import com.yanzuoguang.dao.impl.SqlDataField;
import com.yanzuoguang.util.YzgError;
import com.yanzuoguang.util.base.ObjectHelper;
import com.yanzuoguang.util.helper.ArrayHelper;
import com.yanzuoguang.util.helper.StringHelper;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* 分别处理每一项,用于替换
*
* @author 颜佐光
*/
public class SqlCondItem extends SqlCondBase<SqlCondItem> {
public SqlCondItem(String... field) {
this(Arrays.asList(field));
}
public SqlCondItem(List<String> fields) {
this(null, fields);
}
public SqlCondItem(Runnable debugRunnable, String... field) {
this(debugRunnable, Arrays.asList(field));
}
public SqlCondItem(Runnable debugRunnable, List<String> fields) {
super(fields);
super.debugRunnable = debugRunnable;
}
/**
* 当前条件是否相等
*
* @param model 请求参数实体
* @param sqlField 请求字段
* @return
*/
@Override
protected int getCondType(Object model, SqlDataField sqlField) {
return SqlCondDefault.getCondType(this.fields, model, sqlField);
}
/**
* 获取新的SQL语句
*
* @param sql
* @param sqlData
* @param sqlDataField
* @param model
* @param codeMap
* @return
*/
@Override
public String getSql(String sql, SqlData sqlData, SqlDataField sqlDataField, Object model, Map<String, List<String>> codeMap) {
if (sqlDataField.getCond() != this) {
throw YzgError.getRuntimeException("025");
}
if (debugRunnable != null) {
// 用于断点调试的支持
debugRunnable.run();
}
int condType = getCondType(model, sqlDataField);
switch (condType) {
case COND_TYPE_CONST_ONLY_PARA: {
throw YzgError.getRuntimeException("027");
}
case COND_TYPE_CODE_COND: {
String fieldName = this.fields.isEmpty() ? StringHelper.EMPTY : this.fields.get(0);
// 判断代码片段是否合法
if (sqlDataField.getCodes().size() % 2 == 1) {
throw YzgError.getRuntimeException("026", this.getClass().getSimpleName(), sqlData.getName(), fieldName);
}
Object value = ObjectHelper.get(model, fieldName);
List list = ArrayHelper.getList(value);
for (Object item : list) {
// 处理代码片段
for (int i = 0; i < sqlDataField.getCodes().size(); i = i + DaoConst.CODE_UNIT) {
String codeName = sqlDataField.getCodes().get(i);
String codeValue = sqlDataField.getCodes().get(i + 1);
codeValue = codeValue.replaceAll("\\?", item.toString()).replaceAll("\\{0\\}", item.toString());
codeValue = StringHelper.getCodeString(codeValue, item);
addCodeMap(codeMap, codeName, codeValue);
}
}
break;
}
case COND_TYPE_NONE:
default:
break;
}
return sql;
}
/**
* 将当前条件复制为新的对象
*
* @return
*/
@Override
public SqlCondItem copy() {
SqlCondItem cond = new SqlCondItem(this.debugRunnable, this.fields);
return cond;
}
}