java動態生成SQL中的where條件


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM