6.5
今天对于前端传递到后端的数据,时使用编码后发送的,导致传递到后端后必须得先进行返还原值再使用,对我们测试阶段,就先不使用这种方法,
最后在后端可以得到的数据是上述的示例,然后我先拆分成List类型,对于自己定义的四个变量 拆分成数组,然后定义一个函数进行拼接sql语句
拆分字符串
package com.example.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.ArrayList; import java.util.List; @Data @AllArgsConstructor @NoArgsConstructor public class Item { String logicalOperator; String field; String value; String matchType; public static List<Item> parseStringToList(String dp) { List<Item> items = new ArrayList<>(); String[] clauses = dp.split(","); for (String clause : clauses) { Item item = new Item(); // Determine logical operator and adjust clause for further parsing if (clause.startsWith("AND")) { item.setLogicalOperator("AND"); clause = clause.substring(3).trim(); } else if (clause.startsWith("OR")) { item.setLogicalOperator("OR"); clause = clause.substring(2).trim(); } // Split the adjusted clause by '=' to get field, value, and matchType String[] parts = clause.split("="); if (parts.length >= 3) { item.setField(parts[0].trim()); // Combine value and matchType since they come together in the new format StringBuilder combinedValueMatchType = new StringBuilder(); for (int i = 1; i < parts.length; i++) { combinedValueMatchType.append(parts[i]).append("="); } // Remove the trailing '=' String combined = combinedValueMatchType.deleteCharAt(combinedValueMatchType.length() - 1).toString(); // Split combined string into value and matchType String[] valueMatchParts = combined.split("matchType="); item.setValue(valueMatchParts[0].trim()); item.setMatchType(valueMatchParts[1].trim().replace("matchType=", "")); System.out.println(item.getLogicalOperator()+' '+item.getField()+' '+item.getValue()+' '+item.getMatchType()); items.add(item); } } return items; } }
拼接sql语句
public static String buildSqlConditions(List<Item> items) { StringBuilder sqlBuilder = new StringBuilder(); boolean isFirst = true; for (Item item : items) { if (isFirst) { isFirst = false; } else { switch (item.getLogicalOperator()) { case "AND": sqlBuilder.append(" AND "); break; case "OR": sqlBuilder.append(" OR "); break; } } sqlBuilder.append("`").append(item.getField()).append("`"); if ("精确".equals(item.getMatchType())) { sqlBuilder.append(" = '").append(item.getValue()).append("'"); } else if ("模糊".equals(item.getMatchType())) { sqlBuilder.append(" LIKE concat(").append(" '%' ,'").append(item.getValue()).append("','%' )"); } } return sqlBuilder.toString(); }