hibernate中Query的用法

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();
}

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值