java调用sql返回list_Hibernate执行原生SQL返回ListMap类型结果集
我是学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类型结果集相关推荐
- php原生sql语法,thinkphp执行原生SQL语句的实现方法
怎样在thinkphp里面执行原生的sql语句? $Model = new Model();//或者 $Model = D(); 或者 $Model = M(); $sql = "selec ...
- EFCore之执行原生SQL语句
EFCore通过 LINQ 语法为我们提供了非常便利的方式来操作数据库. 当有些业务逻辑较复杂而不能使用 LINQ 来查询时,可以使用原生 SQL 查询. 或者使用 LINQ 查询导致 SQL 查询效 ...
- php执行删除语句代码,ThinkPHP之数据删除和执行原生SQL语句
一.数据删除 delete() 返回受影响的记录条数 $goods->delete(30);//删除主键值等于30的记录信息 $goods->delete('10,12,14');//删除 ...
- thinkphp mysql 预处理_thinkPHP框架中执行原生SQL语句的方法
本文实例讲述了thinkPHP框架中执行原生SQL语句的方法.分享给大家供大家参考,具体如下: 怎样在thinkphp里面执行原生的sql语句? $Model = new Model();//或者 $ ...
- jpa原生query_JPA执行原生SQL语句
前言 作业的项目终于告一段落了暂时,这周继续进行日志系统的编写,只可惜这周开始练科三了,一开始是全天练车,导致每天写代码的时间减少了好多,后来时间进行了调整(早上四点半到七点半,晚上五点到七点多),也 ...
- 2016/05/13 thinkphp 3.2.2 ① 数据删除及执行原生sql语句 ②表单验证
[数据删除及执行原生sql语句] delete() 返回受影响的记录条数 $goods -> delete(30); 删除主键值等于30的记录信息 $goods -> delete( ...
- django执行原生SQL语句
1.原生SQL用法概述 django可以执行原生SQL语句,主要分读和写两类,用法如下: 读(查):xxxModel.object.raw() 写(增删改):connection.cursor() 2 ...
- php 原生sql 分页查询,Laravel框架执行原生SQL语句及使用paginate分页的方法
本文实例讲述了Laravel框架执行原生SQL语句及使用paginate分页的方法.分享给大家供大家参考,具体如下: 1.运行原生sql public function getList($data){ ...
- ef执行原生sql语句_EF Core中执行原生SQL语句
一.课程介绍之所以今天录制这个系列文章的主要原因是,想在快速帮助到大家上手在ASP.NET Core WebAPI中结合EF Core来操作我们的数据库.EF Core的基础文章和基础课程实在是太多了 ...
最新文章
- 三种方式实现日志记录
- 【维纳滤波】通过MATLAB自带的维纳滤波函数进行滤波
- SpringBoot+Swagger2.7进行接口测试后台无法获取请求参数
- 20210927 LQR
- Linux下查看CPU等基本命令,Linux查看CPU和内存使用情况的常用命令
- linux网络编程--阻塞与非阻塞
- loadrunner 参数化数据更新方式
- oracle查zw001密码,【Oracle错误集锦】:ORA-00119amp;ORA-00132-一团网
- ThinkingInJava 学习 之 0000002 操作符
- java抓取网页数据_简易数据分析 10 | Web Scraper 翻页——抓取滚动加载类型网页...
- 厚积薄发 - 关于runtime的几个问题
- 一款开源且超好用的网站克隆机 HTTrack
- DNN硬件加速器设计1 -- 序(MIT)
- 广外专版-msn聊天记录查看器
- 谷歌浏览器Chrome快速打开Internet选项
- Geotrust证书新申请及续费
- 男人不想打工一辈子,再忙也要读这10本书,提高情商智商
- 题解 修改字符串 DDP基础题
- 轮廓图编程-自定义QChartView
- 简单的类实现接口的方法
热门文章
- ue编辑器拖拽上传图片_为百度UE编辑器上传图片添加水印功能
- java mvc 分页查询条件_java分页条件查询-GridManager.js表格插件+Pageable分页对象+mybatis pagehelper分页插件...
- 一加账号app_资讯知名种草App突然被大规模下架!官方回应
- oracle协议适配器错误00530,oracle监听程序无法启动(TNS-12560: TNS: 协议适配器错误,TNS-00530: 协议适配器错误)...
- java 安装报错2503_Windows安装Node.js报错:2503、2502的解决方法
- python教程:深拷贝与浅拷贝的具体区别在哪里
- python 使用 sorted 对 列表嵌套元组的数据进行排序
- 【深度学习的数学】激活函数的作用是什么?
- Tensorflow yolov3 Intel Realsense D435 单摄像头下各模块识别时间测试
- Pycharm 折叠展开代码快捷键