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
时间: 2024-10-12 20:49:52

HQL的select new map ···语法的相关文章

看懂Gradle脚本(1)- Groovy语言的Map语法糖

这一系列文章是写给刚开始使用Gradle,并且对Groovy语法不是特别了解的Java程序员看的. 本篇文章的目标是解释清楚下面这行Gradle脚本: apply plugin: 'java' 行尾的分号是可选的 用过JavaScript语言的人对这个语法糖应该比较熟悉,下面是补上分号后的脚本: apply plugin: 'java'; Map字面量(Literal) Java语言只有基本类型.String和数组是有字面量的,如下所示: boolean b = false; int i = 1

HQL多个属性查询语法

String hql="select id,name from Street"; 例如:Configuration conf=new Configuration().configure();        SessionFactory sf=conf.buildSessionFactory();        Session session=sf.openSession();        Query query=session.createQuery("select new

pg:select * from analyse 语法错误 在 &quot;analyse&quot; 或附近的 LINE 1: select * from analyse

今天在pg库里建了个analyse表,结果执行就出错了. 刚开始是在java代码里执行的,以为表名写错了,结果复制粘贴了一下还是报错,差点没怀疑我这select * from analyse:语法错了.... 然后在pg库里看了一下. 问题出来!在此看来analyse是个关键字! 然后我百度了一下: EXPLAIN ANALYZE查询计划: 附加一下地址: https://www.jianshu.com/p/10fe35fac2b0 https://hacpai.com/article/1576

java map -&gt;语法

List<Person> personList=new ArrayList(); Person p1=new Person(); p1.setPersonId(1); p1.setPersonName("chm"); List<Area> areaList1=new ArrayList<>(); Area a1=new Area(); a1.setAreaId(1); a1.setAreaName("海淀"); a1.setCit

HQL语句中类的别名语法以及作用?

类名 as 别名类名后跟别名作用:a.调用时方便b.Hibernate中最简单的查询是from Street ,只是简单地返回Street类的所有实例.在很多时候可能需要为类设置别名(alias),因为我们可能需要查询其他部分引用Street.from Street as   sS是Street别名,通过as关键字指定,关键字as是可选的我们也可以写成如下形式:from Street   s也可以出现多个类from Street as s,District as d

hive的基本语法汇总(hql)

2019/2/20 星期三 hive的基本语法汇总(hql)----------------------------------------------Hive学习3:Hive三种建表语句详解 https://blog.csdn.net/qq_36743482/article/details/78383964Hive建表方式共有三种:1.直接建表法例如:create table table_name(col_name data_type);2.查询建表法例如:通过AS 查询语句完成建表:将子查询

Nhibernate HQL 匿名类(严格说是map的使用以及构造函数的使用

1.map的使用 var hql=string.Format(@"select new map( tc.LimitIndexType as LimitIndexType, tc.LimitScope as LimitScope, tb.Id as Id ) from BasLimitConfig tb,BasProductGroup ta ,BasLimitType tc where tb.LimitDim1Id =ta.Id and tb.LimitDim2Id = tc.Id ")

hql语句中的select字句和from 字句

package com.imooc.model; import java.util.List; import java.util.Map; import org.hibernate.Query; import org.hibernate.Session; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.imooc.util.HibernateSessionFactory; pub

select 语法

select 语句主要语法: SELECT select_list [ INTO new_table ] FROM table_source [ WHERE search_condition ] [ GROUP BY group_by_expression ] [ HAVING search_condition ] [ ORDER BY order_expression [ ASC | DESC ] ] 比较全的如下: SELECT [ALL | DISTINCT | DISTINCTROW ]