HqlHelper查询助手

来源:互联网 发布:剑三黑鹤道长捏脸数据 编辑:程序博客网 时间:2024/05/16 06:25
package com.jh.hiv.utils;

import java.util.ArrayList;
import java.util.List;

/**
 * 用于辅助生成HQL语句与参数列表
 *
 * @author tyg
 *
 */
public class HqlHelper {

    private String selectClause = ""; // select子句
    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 HqlHelper(Class clazz, String alias) {
        fromClause = "FROM " + clazz.getSimpleName() + " " + alias;
    }

    /**
     * 拼接select子句,选择特定的列
     * @param  property (传入选择的列  多列用逗号“,” 隔开 )
     * @return
     */
    public HqlHelper AddSelect(String property){
        if(selectClause.length() == 0 ){
            selectClause = "select "+property+" ";
        }else{
            selectClause += property +" ";
        }
        return this;

    }


/**
* 构造where子句
* @param condition 查询条件语句;例如:i.title like ?
* @param params 查询条件语句中?对应的查询条件值;例如: %标题%
*/
    public HqlHelper addWhereCondition(String condition, Object... params) {
        if (whereClause.length() == 0) {
            whereClause = " WHERE " + condition;
        } else {
            whereClause += " AND " + condition;
        }

        if (params != null && params.length > 0) {
            for (Object param : params) {
                this.parameters.add(param);
            }
        }

        return this;
    }

    /**
     * 如果第一个参数为true,则拼接Where子句(添加的多个过滤条件之间是使用AND连接的)
     *
     * @param append   为true 添加条件
     * @param condition
     *            一个过滤条件
     * @param params
     */
    public HqlHelper addWhereCondition(boolean append, String condition, Object... params) {
        if (append) {
            addWhereCondition(condition, params);
        }
        return this;
    }

    /**
     * 拼接OrderBy子句
     *
     * @param propertyName
     * @param isAsc
     */
    public HqlHelper addOrderByProperty(String propertyName, boolean isAsc) {
        if (orderByClause.length() == 0) {
            orderByClause = " ORDER BY " + propertyName + (isAsc ? " ASC" : " DESC");
        } else {
            orderByClause += ", " + propertyName + (isAsc ? " ASC" : " DESC");
        }
        return this;
    }

    /**
     * 如果第一个参数为true,则拼接OrderBy子句
     *
     * @param propertyName
     * @param isAsc
     */
    public HqlHelper addOrderByProperty(boolean append, String propertyName, boolean isAsc) {
        if (append) {
            addOrderByProperty(propertyName, isAsc);
        }
        return this;
    }

    /**
     * 获取查询数据列表的的HQL语句
     *
     * @return
     */
    public String getQueryListHql() {
        return selectClause + fromClause + whereClause + orderByClause;
    }

    /**
     * 获取查询总记录数的的HQL语句
     *
     * @return
     */
    public String getQueryCountHql() {
        return "SELECT COUNT(*) " + fromClause + whereClause;
    }

    /**
     * 获取参数列表
     *
     * @return
     */
    public List<Object> getParameters() {
        return parameters;
    }

}

0 0
原创粉丝点击