把extractWhereParam方法补充完整
时间: 2023-08-13 20:05:40 浏览: 39
当你在`beforeUpdate`方法中想要提取`where`条件的参数时,你可以使用以下方法来实现:
```java
private Map<String, Object> extractWhereParam(String originalSql, Object originalParam) {
Map<String, Object> whereParams = new HashMap<>();
// 解析原始的update语句,提取where条件
int whereIndex = originalSql.toLowerCase().indexOf("where");
String whereClause = originalSql.substring(whereIndex);
// 解析原始的参数,提取where条件的参数值
if (originalParam instanceof Map) {
Map<?, ?> paramMap = (Map<?, ?>) originalParam;
for (Map.Entry<?, ?> entry : paramMap.entrySet()) {
Object key = entry.getKey();
Object value = entry.getValue();
if (whereClause.contains(key.toString())) {
whereParams.put(key.toString(), value);
}
}
} else if (originalParam instanceof BaseEntity) {
Field[] fields = originalParam.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
String fieldName = field.getName();
Object fieldValue;
try {
fieldValue = field.get(originalParam);
if (whereClause.contains(fieldName)) {
whereParams.put(fieldName, fieldValue);
}
} catch (IllegalAccessException e) {
// 处理异常
}
}
}
return whereParams;
}
```
这个方法接受两个参数:原始的SQL语句`originalSql`和原始的参数对象`originalParam`。它会解析原始的SQL语句,提取出`where`条件部分,并根据参数对象的类型,提取出`where`条件中用到的参数值。
如果参数对象是一个`Map`,它会遍历`Map`中的键值对,如果`where`条件中包含该键对应的参数名,则将该参数名和参数值存入`whereParams`中。
如果参数对象是一个实体类,并且实体类的字段与`where`条件中的参数名一致,它会使用反射来获取字段的值,并将字段名和字段值存入`whereParams`中。
最后,方法返回一个`Map<String, Object>`,其中键是参数名,值是参数值。你可以根据需要进一步处理这些参数。