思路
- 设定 一般查询sql 的 StringBuilder, 以及where 条件的 StringBuilder;(order by 等 类似)
- 当一般参数存在或者不为空时将条件 append 加入 一般查询sql 的 StringBuilder
- 一般查询sql 的 StringBuilder 与 where 条件的 StringBuilder 拼接到一起得到总的 sql 字符串(顺序符合 sql本身的定义)
- 通过 createQuery( sql ); 创建 Query 对象
- 通过判断一般查询参数是否存在 对query 中 加入对应类型的参数
- 通过query 获取对应的结果 list
关键代码
部分使用伪代码
List<String> queryStates = paramModel.getQueryStates();
Date startTime = paramModel.getStartTime();
String title = paramModel.getTitle();
StringBuilder sql = new StringBuilder();
StringBuilder where = new StringBuilder();
if (StringUtils.isNotBlank(title)) {
where.append(" and title = :Title ");
}
if (null != startTime) {
where.append(" and start_time >= :startTime ");
}
if (CollectionUtils.isNotEmpty(queryStates)) {
where.append(" and state in (:queryStates) ");
}
sql += where;
Query query = getCurrentSession().createQuery(sql.toString());
if (StringUtils.isNotBlank(title)) {
query.setString("title", title);
}
if (null != startTime) {
query.setDate("startTime", startTime);
}
if (CollectionUtils.isNotEmpty(queryStates)) {
query.setParameterList("queryStates", queryStates);
}
List<T> list = query.setFirstResult(page.getStartRow()).setMaxResults(page.getPageSize()).list();
query.list();
|