java拼接sql工具類


三個類:

Opt.java //sql語句運算符枚舉類
Condition.java //查詢條件類,
SqlHandle.java //拼接工具類

Opt.java代碼如下:

public enum Opt {
    // 等於
    Equal,
    // 不等於
    UnEqual,
    // 大於
    GreatThan,
    // 小於
    LessThan,
    // 模糊like
    Like
}

Condition.java代碼如下:

public class Condition {

    private String name;// 條件名
    private Opt Opertion;// 運算符
    private Object value;// 條件值

    public Condition() {
        super();
    }

    public Condition(Opt opertion, String name, Object value) {
        super();
        Opertion = opertion;
        this.name = name;
        this.setValue(value);
    }

    public static Condition eq(String propertyName, Object value) {
        return new Condition(Opt.Equal, propertyName, value);
    }
    
    public static Condition like(String propertyName, Object value) {
        return new Condition(Opt.Like, propertyName, value);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Opt getOpertion() {
        return Opertion;
    }

    public void setOpertion(Opt opertion) {
        Opertion = opertion;
    }

    public Object getValue() {
        return value;
    }

    public void setValue(Object value) {
        if (this.Opertion != null && this.Opertion.equals(Opt.Like)) {
            this.value = "%" + value + "%";
        } else {
            this.value = value;
        }
    }
}

SqlHandle.java代碼如下:

public class SqlHandle {

    private StringBuffer sql;
    private List<Condition> list = new ArrayList<Condition>();

    public SqlHandle() {
    }

    public SqlHandle(String sql) {
        this.sql = new StringBuffer(sql);
    }

    public static SqlHandle getInstance(String sql) {
        return new SqlHandle(sql);
    }

    /**
     * 
     * @類名稱:add
     * @類描述:添加條件
     * @param condition
     */
    public void add(Condition condition) {
        this.list.add(condition);
    }

    public String getSql() {
        return this.sql.append(this.getwhereString()).toString();
    }

    public void printSql() {
        System.out.println("生成的sql語句:" + this.sql.toString() + this.getwhereString());
    }

    /*
     * 得到where子句,以?為占位符。
     */
    /**
     * 
     * @類名稱:getwhereString
     * @類描述:得到where子句,以?為占位符。通過條件集合中所存儲的條件進行and拼接的where子句
     * @注意:不能與getwhereOrString同時使用
     * @return:拼接好的where子句
     */
    public String getwhereString() {
        StringBuffer sb = new StringBuffer();
        if (list.size() <= 0) {
            return "";
        } else {
            sb.append(" where 1=1 and");
            for (Condition item : list) {
                sb.append(" " + item.getName());
                switch (item.getOpertion()) {
                case Equal:
                    sb.append(" = ");
                    break;
                case UnEqual:
                    sb.append(" <> ");
                    break;
                case GreatThan:
                    sb.append(" >= ");
                    break;
                case LessThan:
                    sb.append(" <= ");
                    break;
                case Like:
                    sb.append(" like ");
                    break;
                }
                sb.append("? and");
            }
            if (sb.toString().endsWith("and")) {
                sb.delete(sb.length() - 3, sb.length());
            }
            return sb.toString();
        }
    }

    /**
     * 
     * @類名稱:getwhereOrString
     * @類描述:得到where子句,以?為占位符。通過條件集合中所存儲的條件進行or拼接的where子句
     * @注意:不能與getwhereString同時使用
     * @return:拼接好的where子句
     * @創建時間2014/4/16
     */
    public String getwhereOrString() {
        String result = this.getwhereString();
        return result.replace("and", "or");
    }

    /**
     * 
     * @類名稱:getwhereNotWithWhere
     * @類描述:得到where子句,以?為占位符。通過條件集合中所存儲的條件進行and拼接的where子句,並且去掉where關鍵字
     * @注意:不能與其他getwhere方法同時使用
     * @return:拼接好的where子句,去掉where關鍵字
     * @創建時間2014/4/16
     */
    public String getwhereNotWithWhere() {
        String result = this.getwhereString();
        return result.replace(" where ", " ");
    }

    /**
     * 
     * @類名稱:getwhereValues
     * @類描述:通過條件集合中的條件得到與where字句位置對應的object集合。存儲所有的值
     * @return*/
    public Object[] getwhereValues() {
        Object[] obj = new Object[this.list.size()];
        for (int i = 0; i < this.list.size(); i++) {
            obj[i] = this.list.get(i).getValue();
        }
        return obj;
    }

}

使用舉例:

SqlHandle sqlHandle = SqlHandle.getInstance("from courseWare_CourseWare cw");
        if (searchBean != null) { // searchBean不為空,設置查詢條件
            String cwName = searchBean.getCwName();
            String cwNo = searchBean.getCwNo();
            String cwBatchId = searchBean.getFkCwBatchId() != null ? searchBean.getFkCwBatchId().getId() : null;
            String fkPlanTerm = searchBean.getFkPlanTerm();
            if (cwName != null && !cwName.isEmpty()) { // 課件名稱查詢
                sqlHandle.add(Condition.like("cw.cwName", cwName));
            }
            if (cwNo != null && !cwNo.isEmpty()) { // 課件編號查詢
                sqlHandle.add(Condition.like("cw.cwNo", cwNo));
            }
            if (cwBatchId != null && !cwBatchId.isEmpty()) { // 批次分類查詢
                sqlHandle.add(Condition.eq("cw.fkCwBatchId.id", cwBatchId));
            }
            if (fkPlanTerm != null && !fkPlanTerm.isEmpty()) {
                sqlHandle.add(Condition.like("cw.fkPlanTerm", fkPlanTerm));
            }
        }
        page = this.courseWareDao.findForPaginationByHql(sqlHandle.getSql(), sqlHandle.getwhereValues(), page.getPageNo(), page.getPageSize());

記下來只是當做筆記,功能還非常不完善,后續會完善。


免責聲明!

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



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