Java 多级对象集合递归拼接 SQL 条件
以下是一个示例代码,它演示了如何使用递归来处理多级对象集合并构建 SQL 查询条件。
public class SqlQueryBuilder {
public static String buildQuery(List<?> objects) {
StringBuilder sb = new StringBuilder();
sb.append("SELECT * FROM table WHERE ");
appendConditions(sb, objects);
return sb.toString();
}
private static void appendConditions(StringBuilder sb, Object object) {
if (object instanceof List<?>) {
List<?> list = (List<?>) object;
sb.append("(");
for (int i = 0; i < list.size(); i++) {
if (i > 0) {
sb.append(" OR ");
}
appendConditions(sb, list.get(i));
}
sb.append(")");
} else if (object instanceof Map<?, ?>) {
Map<?, ?> map = (Map<?, ?>) object;
for (Map.Entry<?, ?> entry : map.entrySet()) {
String key = entry.getKey().toString();
Object value = entry.getValue();
if (value instanceof List<?>) {
sb.append("(");
for (int i = 0; i < ((List<?>) value).size(); i++) {
if (i > 0) {
sb.append(" OR ");
}
sb.append(key).append(" = ").append(((List<?>) value).get(i));
}
sb.append(")");
} else if (value instanceof Map<?, ?>) {
appendConditions(sb, value);
} else {
sb.append(key).append(" = ").append(value);
}
sb.append(" AND ");
}
// Remove the last " AND "
sb.setLength(sb.length() - 5);
}
}
}
使用该代码,可以将多级对象集合转换为 SQL 查询条件。例如,假设有以下类:
public class Person {
private int id;
private String name;
private List<Address> addresses;
// getters and setters
}
public class Address {
private int id;
private String city;
private Map<String, Object> attributes;
// getters and setters
}
现在,我们可以使用以下代码将 List<Person> 转换为 SQL 查询条件:
List<Person> persons = ... // Populate the list
String sql = SqlQueryBuilder.buildQuery(persons);
System.out.println(sql);
该代码将生成一个 SQL 查询,其中包含 Person 对象及其关联的 Address 对象。可以通过添加其他对象类型的逻辑来支持更复杂的对象关系。
原文地址: https://www.cveoy.top/t/topic/mXGG 著作权归作者所有。请勿转载和采集!