辅助拼接生成HQL的工具类

/**
 * 用于辅助拼接生成HQL的工具类
 * 
 * @author tyg
 * 
 */
public class HqlHelper  {

	private String fromClause; // From子句,必须
	private String whereClause = ""; // Where子句,可选
	private String orderByClause = ""; // OrderBy子句,可选

	private List<Object> parameters = new ArrayList<Object>(); // 参数列表

	/**
	 * 生成From子句,默认的别名为'o'
	 * 
	 * @param clazz
	 */
	public HqlHelper(Class clazz) {
		this.fromClause = "FROM " + clazz.getSimpleName() + " o";
	}

	/**
	 * 生成From子句,使用指定的别。'
	 * 
	 * @param clazz
	 * @param alias
	 *            别名
	 */
	public HqlHelper(Class clazz, String alias) {
		this.fromClause = "FROM " + clazz.getSimpleName() + " " + alias;
	}

	/**
	 * 拼接Where子句
	 * 
	 * @param condition
	 * @param params
	 */
	public HqlHelper addCondition(String condition, Object... params) {
		// 拼接
		if (whereClause.length() == 0) {
			whereClause = " WHERE " + condition;
		} else {
			whereClause += " AND " + condition;
		}

		// 保存参数
		if (params != null && params.length > 0) {
			for (Object obj : params) {
				parameters.add(obj);
			}
		}

		return this;
	}

	/**
	 * 如果第1个参数为true,则拼接Where子句
	 * 
	 * @param append
	 * @param condition
	 * @param params
	 */
	public HqlHelper addCondition(boolean append, String condition, Object... params) {
		if (append) {
			addCondition(condition, params);
		}
		return this;
	}

	/**
	 * 拼接OrderBy子句
	 * 
	 * @param propertyName
	 *            属性名
	 * @param isAsc
	 *            true表示升序,false表示降序
	 */
	public HqlHelper addOrder(String propertyName, boolean isAsc) {
		if (orderByClause.length() == 0) {
			orderByClause = " ORDER BY " + propertyName + (isAsc ? " ASC" : " DESC");
		} else {
			orderByClause += ", " + propertyName + (isAsc ? " ASC" : " DESC");
		}
		return this;
	}

	/**
	 * 如果第1个参数为true,则拼接OrderBy子句
	 * 
	 * @param append
	 * @param propertyName
	 *            属性名
	 * @param isAsc
	 *            true表示升序,false表示降序
	 */
	public HqlHelper addOrder(boolean append, String propertyName, boolean isAsc) {
		if (append) {
			addOrder(propertyName, isAsc);
		}
		return this;
	}

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

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

	/**
	 * 获取参数列表,与HQL过滤条件中的'?'一一对应
	 * 
	 * @return
	 */
	public List<Object> getParameters() {
		return parameters;
	}

	/**
	 * 查询并准备分页信息(放到栈顶)
	 * 
	 * @param pageNum
	 * @param service
	 * @return
	 */
	public HqlHelper buildPageBeanForStruts2(int pageNum, BaseDao<?> service) {
		System.out.println("===> HqlHelper.buildPageBeanForStruts2()");
		
		PageBean pageBean = service.getPageBean(pageNum, this);
		ActionContext.getContext().getValueStack().push(pageBean);
		return this;
	}
}



查询使用拼接的方法:
public String chaxun() throws Exception {// StringUtils.isNotEmpty(dement)

		HqlHelper hqlHelper = new HqlHelper(Project.class, "a")// 辅助查询类
				.addCondition(StringUtils.isNotBlank(empname),
						"a.employeename=?", empname)//
						.addCondition("a.deletestate=?", 0)
				.addCondition(StringUtils.isNotBlank(key), "a.keywords like ?",
						"%" + key + "%")//
				.addOrder("a.time", false);//

		List<Object> parameters = hqlHelper.getParameters();// 获取拼接过程的参数
		String sql = hqlHelper.getQueryListHql();// 获取拼接的HQL语句
		List<Project> projectlist = projectService.chaxun(sql, parameters);
		getPageData(projectlist);
		setSize(projectlist.size());
		List<Project> getProjectpage = getPageData(projectlist);
		ActionContext.getContext().put("getProjectpage", getProjectpage);

		List<User> uesrlist = userService.findAll();
		ActionContext.getContext().put("uesrlist", uesrlist);

		return "list";
	}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值