/**
* 用于辅助拼接生成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";
}
辅助拼接生成HQL的工具类
最新推荐文章于 2018-07-25 17:10:33 发布