Hibernate运行原生sql并将查询的结果转化为对象
原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口。下面来描述如何使用这个API进行查询。
标量查询(Scalar queries)
最基本的SQL查询就是获得一个标量(数值)的列表。
sess.createSQLQuery("SELECT * FROM CATS").list();
sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").list();
它们都将返回一个Object数组(Object[])组成的List,数组每个元素都是CATS表的一个字段值。Hibernate会使用ResultSetMetadata来判定返回的标量值的实际顺序和类型。
如果要避免过多的使用ResultSetMetadata,或者只是为了更加明确的指名返回值,可以使用addScalar()。
sess.createSQLQuery("SELECT * FROM CATS")
.addScalar("ID", StandardBasicTypes.LONG)
.addScalar("NAME", StandardBasicTypes.STRING)
.addScalar("BIRTHDATE", StandardBasicTypes.DATE)
这个查询指定了:
SQL查询字符串
要返回的字段和类型
注意:在query中加上 setResultTransformer(Transformers.aliasToBean(clazz));
这里的clazz表示的是传入的自定义的bean.class ,这里的bean是自己封装的,不需要有映射文件,如果使用query = getSession().createSQLQuery(sql).addEntity(clazz); 需要bean具有映射文件
query = getSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(clazz));
当对象的属性类型与查询出来的字段类型不一致时,可以通过addScalar("smallclass_id", StandardBasicTypes.INTEGER) 这个方法进行设置,第一个参数是字段名称,第二个参数是对象的类型,但是:当使用了addScalar时,所有的查询的字段都需要重新设置类型,否则不设置的字段查询出来值为null,例如:
Query query=getCurrent().createSQLQuery(sql).addScalar("smallclass_id", StandardBasicTypes.INTEGER).addScalar("smallclassrights",StandardBasicTypes.INTEGER).setResultTransformer(new AliasToBeanResultTransformer(SmallClass.class))
封装到SmallClass中的属性只有smallclass_id和smallclassrights两个字段是有值的,如果存在第三个属性,则封装到对象中值为null
---------------------
作者:飞天武者
来源:CSDN
原文:https://blog.csdn.net/hhua5230/article/details/79923678
版权声明:本文为博主原创文章,转载请附上博文链接!
Hibernate运行原生sql并将查询的结果转化为对象的更多相关文章
- Hibernate执行原生SQL返回List<Map>类型结果集
我是学java出身的,web是我主要一块: 在做项目的时候最让人别扭的就是hibernate查询大都是查询出List<T>(T指代对应实体类)类型 如果这时候我用的联合查询,那么返回都就是 ...
- hibernate使用原生SQL查询返回结果集的处理
今天没事的时候,看到公司框架里有一个用原生SQL写的函数,说实在以前自己也干过这事,但好久都没有用,都忘得差不多了,现在基本都是用的hql语句来查询结果.hibernate中使用createSQLQu ...
- Hibernate SQLQuery 原生SQL 查询及返回结果集处理-1
第一篇:官方文档的处理方法,摘自官方 在迁移原先用JDBC/SQL实现的系统,难免需要采用hibernat native sql支持. 1.使用SQLQuery hibernate对原生SQL查询执行 ...
- java:Hibernate框架3(使用Myeclipse逆向工程生成实体和配置信息,hql语句各种查询(使用hibernate执行原生SQL语句,占位符和命名参数,封装Vo查询多个属性,聚合函数,链接查询,命名查询),Criteria)
1.使用Myeclipse逆向工程生成实体和配置信息: 步骤1:配置MyEclipse Database Explorer: 步骤2:为项目添加hibernate的依赖: 此处打开后,点击next进入 ...
- hibernate 5原生sql查询测试学习代码
基本查询 import java.util.List; import org.hibernate.SQLQuery; import org.hibernate.Session; import org. ...
- Hibernate 的原生 SQL 查询
Hibernate除了支持HQL查询外,还支持原生SQL查询. 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取 ...
- hibernate使用原生SQL查询
以下是Demo测试Hibernate 原生SQL查询: import java.util.Iterator; import java.util.List; import java.util.Map; ...
- JPA或Hibernate中使用原生SQL实现分页查询、排序
发生背景:前端展示的数据需要来自A表和D表拼接,A表和D表根据A表的主键进行关联,D表的非主键字段关联C表的主键,根据条件筛选出符合的数据,并且根据A表的主键关联B表的主键(多主键)的条件,过滤A表中 ...
- 关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题
转自博客http://blog.csdn.net/xd195666916/article/details/5419316,同时感谢博主 今天做了个用hibernate直接执行原生sql的查询,报错No ...
随机推荐
- phpstrom常用快捷键
mark一下 格式化(应设置QQ快捷键) 自动代码提示 Ctrl+Alt+L Ctrl+J 页面查找 页面查找并替换 Ctrl+F Ctrl+R 全局查找 全局查找并替换 ...
- python中的lambda表达式
lambda是python中匿名函数的写法 我们可以在不定义函数名的情况下一边定义并调用这个函数 例子: 普通方法定义函数:def plus(a,b): return a+b lambda方法 ...
- tcl实现批量压缩文件夹
tcl脚本本身对字符串的处理比较简单,所以想着用这个也实现下: proc main {} { puts "请输入路径:" set strpath "E:\\123&quo ...
- protel dxp 2004安装与破解
安装准备 压缩文件包内容: dxp2004汉化补丁 dxp2004元件库 Network License Setup网络版注册机 Protel DXP2004原程序 Protel2004_sp2_单机 ...
- mknod语法
1.语法 mknod [选项] 设备名 设备类型 主设备号 次设备号 2.选项参数列表 选项 说明 --version 显示命令版本信息 --help 显示帮助信息 -m | - ...
- Spring 内部注入bean
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- centos6.5卸载及安装git
一.卸载原有的git 用whereis git命令来检查是否已经安装了git版本的 再使用命令:yum remove git卸载git 二.安装git (一)官网下载:https://mirrors. ...
- python 对 sqlite3的简单使用
SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成.Python就内 ...
- 今天写代码遇到了一个BUG
在我们日常写注释是需要注意,在有返回值的里面不要用以下方式注释,不然不会报错,运行状态码返回也是200,但就不是想要的结果. 下面举个例子 return { 'token':token, 'user_ ...
- python爬虫套件在mac上的安装-bs的安装
1,首先安装pip gem install pip 这种方式会报错: ERROR: While executing gem ... (Gem::FilePermissionError) You do ...