在編寫接口的時候,查詢關系型數據庫是經常有的事情,如果我們不用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'