自己写了个类来封装hibernate的hql语句的生成

天天写hql有点麻烦,就自己写了个用来生成hql的工具类:HqlHelper其具体代码如下:

/**
 * HQL生成器
 * @author cjd
 */
public class HqlHelper {
	
	private String name;
	private String hql = "";
	private String where = "";
	private String order = "";
	private List<Object> params = new ArrayList<Object>();
	

	/**
	 * 构造函数
	 * @param c	查询的类名
	 * @param name 别名
	 */
	public HqlHelper(Class<?> c,String name){
		hql = "From " +c.getSimpleName()+" "+name ;
		this.name = name;
	}
	
	/**
	 * 向hql语句中添加where约束,例如.addWhere("author=?",user);
	 * @param condition
	 * @param value
	 * @return
	 */
	public HqlHelper addWhere(String condition,Object obj){
		if(where.length()==0){
			where = " WHERE "+ condition;
		}else{
			where += " AND " + condition;
		}
		params.add(obj);
		return this;
	}
	/**
	 * 添加条件为null.例如:addConditionIsNull("d.teacher");
	 * @param condition
	 * @return
	 */
	public HqlHelper addConditionIsNull(String condition){
		if(where.length()==0){
			where = " WHERE "+ condition+ " IS NULL ";
		}else{
			where += " AND "+ condition + " IS NULL ";
		}
		return this;
	}
	/**
	 * 添加条件不为null.例如:addConditionIsNull("d.teacher");
	 * @param condition
	 * @return
	 */
	public HqlHelper addConditionNotNull(String condition){
		if(where.length()==0){
			where = " WHERE "+ condition+ " IS NOT NULL ";
		}else{
			where += " AND "+ condition + " IS NOT NULL ";
		}
		return this;
	}
	/**
	 * 拼接Where子句
	 * 
	 * @param append
	 * @param condition
	 * @param params
	 */
	public HqlHelper addCondition(String condition, Object param) {
		addWhere(condition, param);
		return this;
	}
	
	/**
	 * 如果第1个参数为true,则拼接Where子句
	 * 
	 * @param append
	 * @param condition
	 * @param params
	 */
	public HqlHelper addCondition(boolean append, String condition, Object param) {
		if (append) {
			addWhere(condition, param);
		}
		return this;
	}
	
	/**
	 * 拼接OrderBy子句
	 * 
	 * @param propertyName
	 *            属性名
	 * @param isAsc
	 *            true表示升序,false表示降序
	 */
	public HqlHelper addOrder(String propertyName, boolean isAsc) {
		if (order.length() == 0) {
			order = " ORDER BY " + propertyName + (isAsc ? " ASC" : " DESC");
		} else {
			order += ", " + propertyName + (isAsc ? " ASC" : " DESC");
		}
		return this;
	}
	
	/**
	 * 拼接OrderBy子句
	 * 
	 * @param propertyName
	 *            属性名
	 * @param isAsc
	 *            true表示升序,false表示降序
	 */
	public HqlHelper addOrder(String propertyName, String order) {
		if (this.order.length() == 0) {
			this.order = " ORDER BY " + propertyName +" "+ order;
		} else {
			this.order += ", " + propertyName + " " + order;
		}
		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;
	}
	/**
	 * 返回sql查询语句
	 * @return
	 */
	public String getHQL(){
		return hql+where+order;
	}
	
	/**
	 * 返回hql查询语句所需要的参数列表
	 * @return
	 */
	public List<Object> getPatams(){
		return params;
	}
	/**
	 * 返回对应的查询count(*)的hql语句
	 * @return
	 */
	public String getCountHQL(){
		return "SELECT COUNT(*) "+getHQL();
	}
	public String getDeleteHQL(){
		return "DELETE  "+getHQL();
	}

}

使用方法(一个完整的异步获取数据的例子,PageUtil是页面封装的一个类):

		@RequestMapping(value = "/contentList.do")
		public Object jkHomeContentList(HttpServletRequest request,HttpServletResponse response,Integer rows,Integer page,String sort,String order)throws Exception {
			HqlHelper hqlHelper = new HqlHelper(TContent.class, "c");
			PageUtil pageUtil = new PageUtil(rows,page);
			String en_name = request.getParameter("en_name");
			String zh_name = request.getParameter("zh_name");
			if(en_name==null || en_name.length()==0){
				hqlHelper.addCondition("c.en_name like ?", "jk_index_%");
			}else{
				hqlHelper.addCondition("c.en_name = ?", en_name);
			}
			if(zh_name!=null && zh_name.trim().length()>0){
				hqlHelper.addCondition("c.zh_name like ?", "%"+zh_name.trim()+"%");
			}
			if(sort!=null){
				hqlHelper.addOrder(sort, order);
			}
			hqlHelper.addOrder("c.en_name",true);
			hqlHelper.addOrder("c.position_id", true);
			commonService.listByHqlHelper(hqlHelper,pageUtil);
			JSONObject result = JSONObject.fromObject(pageUtil);
			response.getWriter().write(result.toString());
			return null;
		}

实际上hibernate本身就提供了不使用hql的查询类Criteria,有兴趣的可以自己去学习,我先入为主,喜欢用自己写的东西,大家看情况吧。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值