HQL的select new map ···語法
阿新 • • 發佈:2017-12-06
address hose 使用 ref blank system 方法 lis 表達式
通常hibernate查詢出的結果集是類似於 List<T> 或 List<Object[]> 的類型
類似於下面這個方法
public List<SfJmsfT> getChosePayList(SfJmsfT jmsf) { List list = new ArrayList(); StringBuilder hql = new StringBuilder(); hql.append("From SfJmsfT where zf = 0 and yhbh=? and czbh=?"); List<SfJmsfT> result = null; try { result = this.executeHqlList(hql.toString(), new Object[]{jmsf.getYhbh(),jmsf.getCzbh()}); } catch (BDXCException e) { e.printStackTrace(); logger.error(BDXCUtil.getExceptionString(e)); }return result; }
其實hibernate可以查詢出List<Map<String,Object>>類型的結果集。現簡單代碼描述
語句1
// 結果list中,每條記錄對應一個object數組,object[]中每個元素為hql語句中列的序號(從0開始)。 String hql=“select s.name from Student s”; List ls=session.createQuery(hql).list(); for(String obj[]:ls){ System.out.pringln(obj[0]); }
語句2
//結果list中,每條記錄對應一個map,map中key為hql語句中的序號,從0開始,key為字符,非數字。 String hql=“select new map(s.name) from Student s”; List ls=session.createQuery(hql).list(); for(Map m:ls){ System.out.pringln(m.get("0")); }
語句3
//結果list中,每條記錄對應一個map,map中key為hql語句中的別名。 String hql=“select new map(s.name as name) from Student s”; List ls=session.createQuery(hql).list(); for(Map m:ls){ System.out.pringln(m.get("name")); }
hibernate對 select new map類型的hql解析的時候,遇到map這個關鍵字,將後面的列作為值,別名作為鍵(若無別名,則用數字代替)存入到一個HashMap中。
方法中使用該類型hql
public String getThirdPayList(BDXCPageContext context, SfJmsfT queryVo) { List list = new ArrayList(); // 根據queryVo對象轉換查詢條件 String sql = "SELECT COUNT(yhbh) FROM sf_jmsf_t WHERE zf=‘0‘ and jffs=‘銀行‘ "; sql=sqlPingjie(sql,queryVo); Long num = serialBillDao.getThirdPayListCount(sql, list.toArray()); context.setTotalNum(num.intValue()); String hql = " select new map(bh as bh,yhbh as yhbh,cnq as cnq,fylb as fylb ," + "jfrq as jfrq,jfje as jfje,zkje as zkje,czbh as czbh,lsh as lsh ,jffs as jffs ," + "czy as czy) FROM SfJmsfT WHERE zf=‘0‘ "; hql=sqlPingjie(hql,queryVo); List result = serialBillDao.getThirdPayList(hql, list, context); String msg = BDXCUtil.createJsonStr(context.getTotalNum(), result); return msg; }
附:select new ***類型解釋
select new List(p.name, p.address) from Person as p ; --select將選擇出來的屬性存入一個List對象中
select new ClassTest(p.name, p.address) from Person as p; --select將選擇出來的屬性封裝成對象,前提是ClassTest支持p.name, p.address的構造函數,
select new Map(p.name as personName) from Person as p ; --select將選中的表達式命名為別名,這種用法與new Map()結合,選擇出來的是Map結構, 以personName為key,將實際選擇出來的值作為value
HQL的select new map ···語法