Hibernate处理hql语句封装参数Map集合查询

本文介绍了一个用于获取月度总捐款金额的DAO类实现过程,包括准备HQL语句、封装参数、执行查询等步骤,并详细解释了findObjectByHql和setParams方法的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DAO类:

public Double getMonthAllPays() throws Exception{

      1. 准备hql语句

          String hql="String hql = "select sum(d.donations) from  DwhDonationMonthly d where d.theYear=:theYear and d.theMonth=:theMonth";

      2.定义Map集合,封装参数

         Map<String,Object> params = new HashMap<String,Object>();

     3.将参数封装进Map集合

        Calendar cal = Calendar.getInstance();
        params.put("theYear", cal.get(Calendar.YEAR));
        params.put("theMonth", cal.get(Calendar.MONTH )+1);

     4.将hql语句和参数Map集合传递给hibernate处理

        Object obj = super.findObjectByHql(hql, params);

        return (Double) (obj == null ? 0 : (Double) obj);

}


findObjectByHql实现:

  public Object findObjectByHql(String hql,Map parmas){

  Query query = this.hibernateTemplate.getSessionFactory().getCurrentSession().createQuery(hql);

 query = setParams(params, query);

 1.query.uniqueResult()只返回一个实例


  return query.uniqueResult();

}


setParams(Map params,Query query)的实现:

private Query setParams(Map queryParams, Query query) {
        if (queryParams != null && !queryParams.isEmpty()) {

            Set set = queryParams.keySet();
            Iterator it = set.iterator();
            while (it.hasNext()) {
                String key = it.next().toString();
                Object value=queryParams.get(key);
                if(value instanceof Collection)
                    query.setParameterList(key, (Collection) value);
                else if(value instanceof Object[])
                    query.setParameterList(key, (Object[])value);
                else
                    query.setParameter(key,value);
            }
        }
        return query;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值