分页技巧__设计分页用的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; } }