HibernateCRUD基础框架(2)-HQL语句构造器(HqlQueryBuilder,HqlUpdateBuilder)(一)

2014-11-24 07:25:33 · 作者: · 浏览: 3

上篇讲述了最基本的实体类,本篇接着讲述HQL语句构造器,包括查询和更新等。

优点:通过面向对象的方式构造HQL语句,更快捷,不需要手动拼接HQL。

缺点:封装可能降低性能,只能支持常用的和较为简单的HQL构造。

部分功能不完善,待开发。

1.HQL语句构造器

package cn.fansunion.hibernate.sql;

import org.apache.commons.lang.text.StrBuilder;

import cn.fansunion.hibernate.sql.entity.From;
import cn.fansunion.hibernate.sql.entity.GroupBy;
import cn.fansunion.hibernate.sql.entity.OrderGroup;
import cn.fansunion.hibernate.sql.entity.SearchCondition;

/**
 * HQL语句构造器。
 * 

* 目前只适用于1张表的情况,只有查询条件支持占位符,建议使用完全构造的sql语句(是否会产生sql注入,待研究)。 * * @author LeiWen@FansUnion.cn */ public class HqlQueryBuilder extends ConstantBase { // 查询条件组合策略 // ----------------------------------- // *************From****************** // ----------------------------------- private String select; private From from; // ----------------------------------- // *************Where****************** // ----------------------------------- private SearchCondition searchCondition; // ----------------------------------- // *************Group by************** // ----------------------------------- private GroupBy groupBy; // ----------------------------------- // *************Order by****************** // ----------------------------------- private OrderGroup orderGroup; // ----------------------------------- // 通过构造方法,创建查询构造器。各种字段组合形式的构造方法太多,只给出3种比较常见的。 // 建议使用链式构造或setter方法设置属性。 // ----------------------------------- public HqlQueryBuilder() { } public HqlQueryBuilder(From from) { this.from = from; } public HqlQueryBuilder(From from, SearchCondition searchCondition, GroupBy groupBy, OrderGroup orderGroup) { this.from = from; this.searchCondition = searchCondition; this.groupBy = groupBy; this.orderGroup = orderGroup; } public HqlQueryBuilder select(String select) { this.select = select; return this; } // ----------------------------------- // 支持链式用法,暂时不能很好地支持************** // ----------------------------------- public HqlQueryBuilder from(From from) { this.from = from; return this; } public HqlQueryBuilder from(String model) { doFrom(model, ""); return this; } public HqlQueryBuilder from(String model, String alias) { doFrom(model, alias); return this; } public HqlQueryBuilder from(Class clazz) { doFrom(clazz.getSimpleName()); return this; } public HqlQueryBuilder from(Class clazz, String alias) { doFrom(clazz.getSimpleName(), alias); return this; } private void doFrom(String model) { doFrom(model, null); } private void doFrom(String model, String alias) { this.from = new From(model, alias); } public HqlQueryBuilder searchCodition(SearchCondition searchCondition) { this.searchCondition = searchCondition; return this; } public HqlQueryBuilder groupBy(GroupBy groupBy) { this.groupBy = groupBy; return this; } public HqlQueryBuilder orderBy(OrderGroup orderGroup) { this.orderGroup = orderGroup; return this; } /** * 转换成HQL语句 */ public String toHql() { StrBuilder builder = new StrBuilder(); if (select != null) { builder.append(select).append(EMPTY); } if (from != null) { builder.append(from); } if (searchCondition != null) { builder.append(searchCondition); } if (groupBy != null) { builder.append(groupBy); } if (orderGroup != null) { builder.append(orderGroup); } return bu