1. 程式人生 > >HQL的select new map ···語法

HQL的select new map ···語法

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 ···語法