HQL的select new map ···語法


通常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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM