hibernate中Query的用法
通过SessionFactory获得了session对象后,除了可以通过get(类名.class, id)方法得到相应的对象,还可以通过获得Query对象来取得需要的对象
Query query = session.createQuery("查询语句如from UserBean");
List list = query.list();//得到一个集合
也可以用query.uniqueResult();//得到一个单个的对象
分页查询:
query.setFirstResult(位置如0);//表示从哪个位置开始查询,返回query对象
query.setMaxResult(记录条数);//表示当页共几条记录,返回一个集合
session.createQuery("select count(*) from 类名").uniqueResult();//得到记录总数
查询语句同sql查询语句很想象,只是将表名换作类名,字段名换作属性名,如果查询需要条件可以使用占位符来替换对应的属性名,也可以使用:变量名来作为占位符。
一个分页查询:
public QueryResult<T> list(final Class<T> clazz, final int index, final int count,
final String wherehql, final Object[] params,final Map<String, String> orderby) {
final QueryResult<T> qr = new QueryResult<T>();
hibernateTemplate.executeFind(new HibernateCallback<T>() {
@Override
public T doInHibernate(Session session) throws HibernateException,
SQLException {
Query query = session.createQuery(
"from " + getEntityName(clazz) + " o " + (StringUtils.isBlank(wherehql) ? "": "where "+ wherehql)
+ buildOrderby(orderby));
setQueryParams(query, params);
if(index != -1 && count != -1){
query.setFirstResult(index);
query.setMaxResults(count);
}
List<T> list = query.list();
qr.setRecords(list);
query = session.createQuery(
"select count(*) from " + getEntityName(clazz) + " o " + (StringUtils.isBlank(wherehql) ? "": "where "+ wherehql));
setQueryParams(query, params);
long totalrecord = 0;
Object total = query.uniqueResult();
if(total != null){
totalrecord = Long.valueOf(total.toString());
}
qr.setTotalCount(totalrecord);
return (T) list;
}
});
return qr;
}
/**
* 给hql语句中的where子句中的参数赋值
* @param query
* @param queryParams
*/
protected void setQueryParams(Query query, Object[] queryParams){
if(queryParams!=null && queryParams.length>0){
for(int i=0; i<queryParams.length; i++){
query.setParameter(i, queryParams[i]);
}
}
}
/**
* 创建hql语句的order by子句
* @param orderby
* @return
*/
protected String buildOrderby(Map<String, String> orderby){
StringBuffer orderbyql = new StringBuffer("");
if(orderby!=null && orderby.size()>0){
orderbyql.append(" order by ");
for(String key : orderby.keySet()){
orderbyql.append("o.").append(key).append(" ").append(orderby.get(key)).append(",");
}
orderbyql.deleteCharAt(orderbyql.length()-1);
}
return orderbyql.toString();
}