未来_我来
因为渴望改变,所以必须努力

分页技巧__设计分页用的QueryHelper辅助对象

FROM       必须

  实体名

WHERE       可选

  条件1 AND 条件2 AND ... 条件n

ORDER BY     可选

  属性1, 属性2, ... 属性n

QueryHelper.java

/**
 * 用于辅助拼接HQL语句
 */
public class QueryHelper {
    private String fromClause; // FROM子句
    private String whereClause = ""; // Where子句
    private String orderByClause = ""; // OrderBy子句

    private List<Object> parameters = new ArrayList<Object>(); // 参数列表
    /**
     * 生成From子句
     * @param clazz
     * @param alias
     *            别名
     */
    public QueryHelper(Class clazz, String alias) {
        fromClause = "FROM " + clazz.getSimpleName() + " " + alias;
    }
    /**
     * 拼接Where子句
     * @param condition
     * @param params
     */
    public void addCondition(String condition, Object... params) {
        // 拼接
        if (whereClause.length() == 0) {
            whereClause = " WHERE " + condition;
        } else {
            whereClause += " AND " + condition;
        }
        // 参数
        if (params != null) {
            for (Object p : params) {
                parameters.add(p);
            }
        }
    }
    /**
     * 如果第一个参数为true,则拼接Where子句
     * @param append
     * @param condition
     * @param params
     */
    public void addCondition(boolean append, String condition,
            Object... params) {
        if (append) {
            addCondition(condition, params);
        }
    }
    /**
     * 拼接OrderBy子句
     * @param propertyName
     *            参与排序的属性名
     * @param asc
     *            true表示升序,false表示降序
     */
    public void addOrderProperty(String propertyName, boolean asc) {
        if (orderByClause.length() == 0) {
            orderByClause = " ORDER BY " + propertyName
                    + (asc ? " ASC" : " DESC");
        } else {
            orderByClause += ", " + propertyName + (asc ? " ASC" : " DESC");
        }
    }
    /**
     * 如果第一个参数为true,则拼接OrderBy子句
     * @param append
     * @param propertyName
     * @param asc
     */
    public void addOrderProperty(boolean append, String propertyName,
            boolean asc) {
        if (append) {
            addOrderProperty(propertyName, asc);
        }
    }
    /**
     * 获取生成的用于查询数据列表的HQL语句
     * @return
     */
    public String getListQueryHql() {
        return fromClause + whereClause + orderByClause;
    }
    /**
     * 获取生成的用于查询总记录数的HQL语句
     * @return
     */
    public String getCountQueryHql() {
        return "SELECT COUNT(*) " + fromClause + whereClause;
    }
    /**
     * 获取HQL中的参数值列表
     * @return
     */
    public List<Object> getParameters() {
        return parameters;
    }
}
posted on 2017-12-03 15:11  未来_我来  阅读(586)  评论(0编辑  收藏  举报

2 3
4