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

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

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

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

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

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

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 * fromp_dictionary;+-----------------+----+---------+------+--------+--------+

| dictionary_type | id | version | code | forbid | value |

+-----------------+----+---------+------+--------+--------+

| COUNTY | 1 | 0 | 001 | | 四川 |

| COUNTY | 2 | 0 | 002 | | 北京 |

| COUNTY | 3 | 0 | 001 | NULL | 四川 |

+-----------------+----+---------+------+--------+--------+

3 rows in set (0.00sec)

以下分别介绍使用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 asp ;

select将选择出来的属性存入一个List对象中select new ClassTest(p.name, p.address) from Person asp;

select将选择出来的属性封装成对象,前提是ClassTest支持p.name, p.address的构造函数,select new Map(p.name as personName) from Person asp ;

select将选中的表达式命名为别名,这种用法与new Map()结合,选择出来的是Map结构,

以personName为key,将实际选择出来的值作为value

java调用sql返回list_Hibernate执行原生SQL返回ListMap类型结果集相关推荐

  1. php原生sql语法,thinkphp执行原生SQL语句的实现方法

    怎样在thinkphp里面执行原生的sql语句? $Model = new Model();//或者 $Model = D(); 或者 $Model = M(); $sql = "selec ...

  2. EFCore之执行原生SQL语句

    EFCore通过 LINQ 语法为我们提供了非常便利的方式来操作数据库. 当有些业务逻辑较复杂而不能使用 LINQ 来查询时,可以使用原生 SQL 查询. 或者使用 LINQ 查询导致 SQL 查询效 ...

  3. php执行删除语句代码,ThinkPHP之数据删除和执行原生SQL语句

    一.数据删除 delete() 返回受影响的记录条数 $goods->delete(30);//删除主键值等于30的记录信息 $goods->delete('10,12,14');//删除 ...

  4. thinkphp mysql 预处理_thinkPHP框架中执行原生SQL语句的方法

    本文实例讲述了thinkPHP框架中执行原生SQL语句的方法.分享给大家供大家参考,具体如下: 怎样在thinkphp里面执行原生的sql语句? $Model = new Model();//或者 $ ...

  5. jpa原生query_JPA执行原生SQL语句

    前言 作业的项目终于告一段落了暂时,这周继续进行日志系统的编写,只可惜这周开始练科三了,一开始是全天练车,导致每天写代码的时间减少了好多,后来时间进行了调整(早上四点半到七点半,晚上五点到七点多),也 ...

  6. 2016/05/13 thinkphp 3.2.2 ① 数据删除及执行原生sql语句 ②表单验证

    [数据删除及执行原生sql语句] delete()  返回受影响的记录条数 $goods -> delete(30);   删除主键值等于30的记录信息 $goods -> delete( ...

  7. django执行原生SQL语句

    1.原生SQL用法概述 django可以执行原生SQL语句,主要分读和写两类,用法如下: 读(查):xxxModel.object.raw() 写(增删改):connection.cursor() 2 ...

  8. php 原生sql 分页查询,Laravel框架执行原生SQL语句及使用paginate分页的方法

    本文实例讲述了Laravel框架执行原生SQL语句及使用paginate分页的方法.分享给大家供大家参考,具体如下: 1.运行原生sql public function getList($data){ ...

  9. ef执行原生sql语句_EF Core中执行原生SQL语句

    一.课程介绍之所以今天录制这个系列文章的主要原因是,想在快速帮助到大家上手在ASP.NET Core WebAPI中结合EF Core来操作我们的数据库.EF Core的基础文章和基础课程实在是太多了 ...

最新文章

  1. 三种方式实现日志记录
  2. 【维纳滤波】通过MATLAB自带的维纳滤波函数进行滤波
  3. SpringBoot+Swagger2.7进行接口测试后台无法获取请求参数
  4. 20210927 LQR
  5. Linux下查看CPU等基本命令,Linux查看CPU和内存使用情况的常用命令
  6. linux网络编程--阻塞与非阻塞
  7. loadrunner 参数化数据更新方式
  8. oracle查zw001密码,【Oracle错误集锦】:ORA-00119amp;ORA-00132-一团网
  9. ThinkingInJava 学习 之 0000002 操作符
  10. java抓取网页数据_简易数据分析 10 | Web Scraper 翻页——抓取滚动加载类型网页...
  11. 厚积薄发 - 关于runtime的几个问题
  12. 一款开源且超好用的网站克隆机 HTTrack
  13. DNN硬件加速器设计1 -- 序(MIT)
  14. 广外专版-msn聊天记录查看器
  15. 谷歌浏览器Chrome快速打开Internet选项
  16. Geotrust证书新申请及续费
  17. 男人不想打工一辈子,再忙也要读这10本书,提高情商智商
  18. 题解 修改字符串 DDP基础题
  19. 轮廓图编程-自定义QChartView
  20. 简单的类实现接口的方法

热门文章

  1. ue编辑器拖拽上传图片_为百度UE编辑器上传图片添加水印功能
  2. java mvc 分页查询条件_java分页条件查询-GridManager.js表格插件+Pageable分页对象+mybatis pagehelper分页插件...
  3. 一加账号app_资讯知名种草App突然被大规模下架!官方回应
  4. oracle协议适配器错误00530,oracle监听程序无法启动(TNS-12560: TNS: 协议适配器错误,TNS-00530: 协议适配器错误)...
  5. java 安装报错2503_Windows安装Node.js报错:2503、2502的解决方法
  6. python教程:深拷贝与浅拷贝的具体区别在哪里
  7. python 使用 sorted 对 列表嵌套元组的数据进行排序
  8. 【深度学习的数学】激活函数的作用是什么?
  9. Tensorflow yolov3 Intel Realsense D435 单摄像头下各模块识别时间测试
  10. Pycharm 折叠展开代码快捷键