在编写接口的时候,查询关系型数据库是经常有的事情,如果我们不用hibernate,也不想写大量无聊的SQL,那该怎么办?
其实用反射的方式获取表的表名和字段名非常容易,但是拼接where条件则比较难,我尝试了一下,也是可以做到的。
代码有些冗长,还有待改进
@AllArgsConstructor @Data public class Condition { private String conditionName; private String operator; private Boolean isString; private Object conditionValue; /** * 构建有关键字占位符的SQL条件语句 * @param conditions * @return */ public static String toSql(List<Condition> conditions) { StringBuilder sb = new StringBuilder("where "); int size = conditions.size(); for (int i = 0; i < size; i++) { Condition condition = conditions.get(i); String conditionName = condition.getConditionName(); Object conditionValue = condition.getConditionValue(); sb.append(conditionName) .append(condition.getOperator()); boolean conditionType = condition.getIsString(); if (conditionType) { sb.append(String.format(" '%s' ",conditionValue)); } else { sb.append(String.format(" %s ",conditionValue)); } if (i != size - 1) { sb.append(" and "); } } return sb.toString(); } public static void main(String[] args) { List<Condition> conditions = new ArrayList<>(); Condition bizmonth = new Condition("bizmonth", "=", true,"2021-06"); Condition tenant_code = new Condition("tenant_code", "=", false,"0385"); Condition create_time = new Condition("create_time", ">", true,"2021-06-09 10:08:00"); conditions.add(bizmonth); conditions.add(tenant_code); conditions.add(create_time); String sql = toSql(conditions); System.out.println(sql); } }
结果:
where bizmonth= '2021-06' and tenant_code= 0385 and create_time> '2021-06-09 10:08:00'