Commit edb870e0 authored by 22管33's avatar 22管33

重构OR查询

parent 8b3d8351
......@@ -41,16 +41,8 @@ PS:项目根目录下面的脚本作用clean_mybatis_generated.sh和clean_mybati
1.将下面的代码拷贝到生成 **xxxExample.java**文件中,拷贝的位置为抽象类 **GeneratedCriteria**中,如下图所示。
```
public Criteria filedsValueOr(List<String> fileds, String value, String column){
addCriterion(Util.dealDataBaseOR(fileds,value,column));
return (Criteria) this;
}
public Criteria filedValuesOr(List<String> fileds, String value, String column){
addCriterion(Util.dealValuesDataBaseOR(fileds,value,column));
return (Criteria) this;
}
public Criteria filedsValuesOr( List<String> fileds,List<String> values, String column){
addCriterion(Util.dealFieldsValuesDataBaseOR(fileds,values,column));
public Criteria fieldsValuesOr( List<String> fields,List<String> values, String column){
addCriterion(Util.dealFieldsValuesDataBaseOR(fields,values,column));
return (Criteria) this;
}
......
......@@ -10,53 +10,42 @@ import java.util.List;
*/
public class Util {
public static String dealDataBaseOR(List<String> fileds, String value, String column){
public static String dealFieldsValuesDataBaseOR(List<String> fields, List<String> values, String column){
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("( ");
fileds.stream().forEach(filed->{
if (column.contains("like")){
stringBuffer.append(filed+" like '%"+value+"%' or ");
}else {
stringBuffer.append(filed+" = '"+value+"' or ");
}
});
stringBuffer.delete(stringBuffer.length()-4,stringBuffer.length()-1);
stringBuffer.append(") ");
return stringBuffer.toString();
}
public static String dealValuesDataBaseOR(List<String> values, String filed, String column){
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("( ");
values.stream().forEach(value->{
if (column.contains("like")){
stringBuffer.append(filed+" like '%"+value+"%' or ");
}else {
stringBuffer.append(filed+" = '"+value+"' or ");
if (fields == null || values == null
|| (fields != null && fields.size() == 0)
|| (values != null && fields.size() == 0) ){
return "1=1";
}
if (fields.size() > 1 && values.size() > 1){
int i =0;
for (String value:values){
if (column.contains("like")){
stringBuffer.append(fields.get(i)+" like '%"+value+"%' or ");
}else {
stringBuffer.append(fields.get(i)+" = '"+value+"' or ");
}
i++;
}
}else {
boolean fieldsOrValue = fields.size() == 1;
List<String> lists = fieldsOrValue?values:fields;
lists.stream().forEach(list->{
if (column.contains("like")){
stringBuffer.append((fieldsOrValue?fields.get(0):list)+" like '%"+(fieldsOrValue?list:values.get(0))+"%' or ");
}else {
stringBuffer.append((fieldsOrValue?fields.get(0):list)+" = '"+(fieldsOrValue?list:values.get(0))+"' or ");
}
});
});
stringBuffer.delete(stringBuffer.length()-4,stringBuffer.length()-1);
stringBuffer.append(") ");
return stringBuffer.toString();
}
public static String dealFieldsValuesDataBaseOR(List<String> fileds, List<String> values, String column){
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("( ");
int i =0;
for (String value:values){
if (column.contains("like")){
stringBuffer.append(fileds.get(i)+" like '%"+value+"%' or ");
}else {
stringBuffer.append(fileds.get(i)+" = '"+value+"' or ");
}
i++;
}
stringBuffer.delete(stringBuffer.length()-4,stringBuffer.length()-1);
stringBuffer.append(") ");
if (fields.size() == 1 && values.size() == 1){
return stringBuffer.toString().replace(" or","");
}
return stringBuffer.toString();
}
......
......@@ -89,32 +89,10 @@ public class MybatisExampleHelper {
Method m = MybatisExampleHelper.getMethod(exampleObjCriteria, funcName);
switch (condition){
case "filedsValueOr":
case "fieldsValuesOr":
try {
m = MybatisExampleHelper.getMethod(exampleObjCriteria, condition);
m.invoke(exampleObjCriteria,(List<String>)((Map<String,Object>)value).get("fileds"),((Map<String,Object>)value).get("value"),column);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
break;
case "filedValuesOr":
try {
m = MybatisExampleHelper.getMethod(exampleObjCriteria, condition);
m.invoke(exampleObjCriteria,(List<String>)((Map<String,Object>)value).get("values"),((Map<String,Object>)value).get("filed"),column);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
break;
case "filedsValuesOr":
try {
m = MybatisExampleHelper.getMethod(exampleObjCriteria, condition);
m.invoke(exampleObjCriteria,(List<String>)((Map<String,Object>)value).get("fileds"),(List<String>)((Map<String,Object>)value).get("values"),column);
m.invoke(exampleObjCriteria,(List<String>)((Map<String,Object>)value).get("values"),(List<String>)((Map<String,Object>)value).get("fields"),column);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment