我是学java出身的,web是我主要一块;

在做项目的时候最让人别扭的就是hibernate查询大都是查询出List<T>(T指代对应实体类)类型

如果这时候我用的联合查询,那么返回都就是List<Object[]> , 这样的结果集让我苦恼了很久,

于是我萌发了使用spring提供的JdbcTemlate来 查询出 List<Map<String,Object>>的念头,

方法虽然可行,可惜的是spring偌大一个框架,居然不提供jdbc分页。。。。

无奈之下我又重新回归hibernate,找了很久,终于发现hibernate原来是可以查询出List<Map<String,Object>>类型的结果集

1.2、query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);

Query 和 SQLQuery都可以使用别名,将查询出来的记录转化成为map

SQLQuery执行出来是{name1: value1, name2: value2}

但是Query 例如语句: select o.name1, o.name2 from Object o

执行出来的却不是想象中的那样而且{0:value1, 1: value2}

import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.transform.ResultTransformer;
import org.hibernate.Session;
import org.hibernate.Query; 最近在学习hibernate
以下代码功能:Hibernate执行原生SQL返回List类型结果集//获得session对象
Session session = super.getSession();
//创建sql语句
String sql = "SELECT users.name,usersinfo.* FROM users,usersinfo WHERE users.id = usersinfo.userid";
//获得SQLQuery对象
SQLQuery query = session.createSQLQuery(sql);
//设定结果结果集中的每个对象为Map类型
query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);
//执行查询
List list = query.list();
//释放session
releaseSession(session);
在使用hibernate进行查询时,使用得最多的还是通过构建hql进行查询了。在查询的过程当中,除使用经常的查询对象方法之外,还会遇到查询一个属性,或一组聚集结果的情况。在这种情况下,我们通常就需要对返回的结构进行处理。
一般情况下,我们通过构建hql,并通过设置query的resultTransformer来定制返回结果的类型,一般设置为map属性,如下所示:
Query query = session.createQuery("hql");?
query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);
来指定查询结果的每一项为一个map。
不过,随着hibernate的发展,可以在hql中直接使用集合查询语句,如list和map了。以下分别介绍使用List和Map时的查询语句以及查询结果。首先,数据库的数据如下所示:
mysql> select * from p_dictionary;
+-----------------+----+---------+------+--------+--------+
| dictionary_type | id | version | code | forbid | value |
+-----------------+----+---------+------+--------+--------+
| COUNTY | | | | | 四川 |
| COUNTY | | | | | 北京 |
| COUNTY | | | | NULL | 四川 |
+-----------------+----+---------+------+--------+--------+
rows in set (0.00 sec)
以下分别介绍使用list和map的查询语句和查询结果:
使用List String query = "select new List(p.code, p.value) from Dictionary p"; List list = session.createQuery(query).list(); System.out.println(list); //结果: [[001, 四川],[002,北京],[001,四川]] ?
使用Map,首先不指定alias,则结果的键就按照查询出来的顺序结果,使用0,1来表示key
String query = "select new Map(p.code, p.value) from Dictionary p"; List list = session.createQuery(query).list(); //结果:[{1=四川, 0=001},{1=北京, 0=002},{1=四川, 0=001}] ?
使用Map,指定alias,则结果中的key则为alias
String query = "select new Map(p.code as code, p.value as value) from Dictionary p"; List list = session.createQuery(query).list(); //结果:[{value=四川, code=001},{value=北京, code=002},{value=四川, code=001}] ?
如果部分使用alias,部分不使用,则使用了alias的将使用alias作为key,没有使用的则仍然使用序号代替,其中序号则为在查询结果的序号
String query = "select new Map(p.code as code, p.value) from Dictionary p"; List list = session.createQuery(query).list(); //结果:[{1=四川, code=001},{1=北京, code=002},{1=四川, code=001}] --------------------------------------------------------------------------------------------------
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

资料整合自:http://blog.sina.com.cn/s/blog_a298547c0101bk58.html

Hibernate执行原生SQL返回List<Map>类型结果集的更多相关文章

  1. java:Hibernate框架3(使用Myeclipse逆向工程生成实体和配置信息,hql语句各种查询(使用hibernate执行原生SQL语句,占位符和命名参数,封装Vo查询多个属性,聚合函数,链接查询,命名查询),Criteria)

    1.使用Myeclipse逆向工程生成实体和配置信息: 步骤1:配置MyEclipse Database Explorer: 步骤2:为项目添加hibernate的依赖: 此处打开后,点击next进入 ...

  2. 关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题

    转自博客http://blog.csdn.net/xd195666916/article/details/5419316,同时感谢博主 今天做了个用hibernate直接执行原生sql的查询,报错No ...

  3. Hibernate执行原生SQL

    1.查询指定字段 public List<Object[]> getUseList( Integer index, Integer offset, String state, String ...

  4. laravel 跨库执行原生 sql 语句

    执行原生 sql 返回结果集

  5. hibernate使用原生SQL查询返回结果集的处理

    今天没事的时候,看到公司框架里有一个用原生SQL写的函数,说实在以前自己也干过这事,但好久都没有用,都忘得差不多了,现在基本都是用的hql语句来查询结果.hibernate中使用createSQLQu ...

  6. Hibernate SQLQuery 原生SQL 查询及返回结果集处理-1

    第一篇:官方文档的处理方法,摘自官方 在迁移原先用JDBC/SQL实现的系统,难免需要采用hibernat native sql支持. 1.使用SQLQuery hibernate对原生SQL查询执行 ...

  7. Spring的jdbcTemplate查询执行原生sql

    在spring与hibernate整合时进行数据库检索,执行原生sql: public AppointmentEvaluateVo searchMyfeedbackDetail(String acco ...

  8. sqlalchemy 执行原生sql语句

    from contextlib import contextmanager from sqlalchemy import create_engine, ForeignKey from sqlalche ...

  9. python 之 Django框架(orm单表查询、orm多表查询、聚合查询、分组查询、F查询、 Q查询、事务、Django ORM执行原生SQL)

    12.329 orm单表查询 import os if __name__ == '__main__': # 指定当前py脚本需要加载的Django项目配置信息 os.environ.setdefaul ...

随机推荐

  1. jquery扩展函数详解(我的人生颠覆)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上次分析了jquery的源码 ...

  2. [USACO2002][poj1945]Power Hungry Cows(启发式搜索)

    Power Hungry CowsTime Limit: 1000MS Memory Limit: 30000K Total Submissions: 4570 Accepted: 1120 Desc ...

  3. HTML布局篇之双飞翼(圣杯)布局

    最近在写页面的时候,总是为布局头疼,倒不是不能布出来,就是感觉不系统,没有成一个体系的感觉.所以决定自己写博文,梳理一下思路. 常用的布局方式大致可以分为三种: 浮动布局 Float 负边距(双飞翼) ...

  4. KK录像机破解补丁

    KK录像机是由杭州凯凯科技有限公司出品的免费的集游戏录像.视频录制.视频剪辑.添加字幕.添加音乐等功能于一体的高清视频录制软件.操作简单,且兼容录制所有游戏视频,是玩家分享精彩的工具. KK VIP功 ...

  5. Address already in use: JVM_Bind<null>:80

    Address already in use: JVM_Bind<null>:80 咱还是闲话少说,直接切入正题. 起因: 一直用Tomcat,但是前几天突然报错: java.net.Bi ...

  6. Mysql-函数coalesce-查询为空设置默认值

    coalesce(字段,默认值) select coalesce(title,'liu') from a

  7. Spring 配置文件applicationContext.xml

    Spring配置文件是用于指导Spring工厂进行Bean生产.依赖关系注入(装配)及Bean实例分发的"图纸". Spring配置文件是一个或多个标准的XML文档,applica ...

  8. 【Gym 100685J】Just Another Disney Problem(交互/排序)

    第一次做交互题. 题意是有n个数(n<1000),你通过问1 a b,后台返回你YES代表a<b,NO代表a>b.要你在10000次询问内给出一个符合的排列.n=1000来说,100 ...

  9. 【Gym 100712A】Who Is The Winner?

    题 题意 解题数目越多越排前,解题数目相同罚时越少越排前,求排第一的队伍名字. 分析 用结构体排序. 代码 #include<cstdio> #include<algorithm&g ...

  10. Java编程思想学习(二) 操作符

    1. 对象“赋值”:对一个对象进行操作时,我们真正操作的是对对象的引用.所以倘若“将一个对象赋值给另一个对象”,实际是将“引用”从一个地方复制到另一个地方.(引用于对象之间存在关联,但这种关联可以被改 ...