zoukankan      html  css  js  c++  java
  • 分页技巧__设计分页用的QueryHelper辅助对象

    分页技巧__设计分页用的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;
        }
    }
  • 相关阅读:
    STM32 + RT Thread OS 学习笔记[四]
    Python学习入门基础教程(learning Python)--5.3 Python写文件基础
    Android Dialog
    poj 2513 连接火柴 字典树+欧拉通路 好题
    Ubuntu 问题解决汇总
    [置顶] 问题解决——产生未引用参数的警告
    BZOJ 1367([Baltic2004]sequence-左偏树+中位数贪心)
    【Cocos2d-X开发学习笔记】第01期:PC开发环境的详细搭建
    在navigationItem中添加搜索栏
    Loading half a billion rows into MySQL---转载
  • 原文地址:https://www.cnblogs.com/justdoitba/p/7965581.html
Copyright © 2011-2022 走看看