本文转载,出处如下:http://bhdweb.iteye.com/blog/801084

HQL尽管容易使用,但是在一些复杂的数据操作上功能有限。特别是在实现复杂的报表统计与计算,以及多表连接查询上往往无能为力,这时可以使用SQL(Native SQL)实现HQL无法完成的任务。

1、使用SQL查询

使用SQL查询可以通过两种方式来实现:

(1)、利用Hibernate提供的SQLQuery对象执行。即可以通过Session对象的createSQLQuery()方法获取。如:

String sql = "select * from product limit 0,10";

  

   SQLQuery query = session.createSQLQuery(sql);

List<Object[]> = query.list();

注意:查询结果返回的是一个Object的数组。

(2)、利用ResultMetaData对象来实现执行SQL语句,但是如果过多地使用这种方法就会对系统的性能产生影响,它将降低运行效率。通过addScalar()方法设置返回数据的类型可以减少ResultSetMetaData对象的使用而提高运行效率。如:

String sql = "select * from product limit 0,10";

SQLQuery sqlQuery = session.CreateSQLQuery();

sqlQuery.addScalar("id",Hibernate.INTEGER);

sqlQuery.addScalar("name",Hibernate.STRING);

sqlQuery.addScalar("addre",Hibernate.STRING);

sqlQuery.addScalar("des",Hibernate.STRING);

List<Object[]> list = sqlQuery.list();

2、返回SQL查询的持久对象

获取SQL查询的持久对象有三种方式实现:

方式1:Hibernate不仅能把查询到的记录封装为包含多个Object数组的List对象返回,还可以把每一条查询到的记录封装成持久对象后返回包含这些对象的List对象。如:

String sql = "select * from product limit 0,10";

SQLQuery sqlQuery = session.CreateSQLQuery();

 

   sqlQuery.addEntity(Product .class);

List<Product> list = sqlQuery.list();

方式2:使用大括号指定查询的字段,然后通过SQLQuery对象对象的addEntity()方法关联SQL中的别名和持久化类确定要返回的List对象中的每个元素类型。如:

String sql = "select{p.*} from Product p,Category c where p.category_id=c.id";

SQLQuery sqlQuery = session.CreateSQLQuery();

 

   sqlQuery.addEntity("p",Product.class);

List<Product> list = sqlQuery.list();

方式3:同时使用SQLQuery对象的addScalar()方法和Transformers对象的aliasToBean()方法关联数据库的表与持久化类确定返回记录的各个字段与持久化类属性的对象对应关系。如:

String sql = "select p.id,p.name from product p,Category c where p.category_id = c.id";

SQLQuery sqlQuery = session.createSQLQuery(sql);

sqlQuery.addScalar("id",Hibernate.INTEGER)

           .addScalar("name",Hibernate.STRING);

sqlQuery.setResultTransformer(Transformers.aliasToBean(Product.class));

Hibernate使用原生SQL(转载)的更多相关文章

  1. Hibernate执行原生SQL返回List<Map>类型结果集

    我是学java出身的,web是我主要一块: 在做项目的时候最让人别扭的就是hibernate查询大都是查询出List<T>(T指代对应实体类)类型 如果这时候我用的联合查询,那么返回都就是 ...

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

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

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

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

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

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

  5. hibernate 5原生sql查询测试学习代码

    基本查询 import java.util.List; import org.hibernate.SQLQuery; import org.hibernate.Session; import org. ...

  6. Hibernate运行原生sql并将查询的结果转化为对象

    原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询.标量查询(Scalar queri ...

  7. Hibernate 的原生 SQL 查询

    Hibernate除了支持HQL查询外,还支持原生SQL查询.         对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取 ...

  8. hibernate使用原生SQL查询

    以下是Demo测试Hibernate 原生SQL查询: import java.util.Iterator; import java.util.List; import java.util.Map; ...

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

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

随机推荐

  1. C语言之冒泡排序

    冒泡排序: 1). 简介 其实就是把一个数组的元素,按照从小到大(从大到小)得顺序,重新排列起来,这种排序就叫冒泡排序 例: int nums[5] = {5,4,3,2,1}; //经过排序后 下标 ...

  2. ABAP 通过sumbit调用另外一个程序使用job形式执行-简单例子

    涉及到两个程序: ZTEST_ZUMA02 (主程序) ZTEST_ZUMA(被调用的程序,需要以后台job执行) "ztest_zuma 的代码 DATA col TYPE i VALUE ...

  3. 使用TypeScript开发ReactNative应用的简单示例

    最近小小尝试了下 ReactNative + TypeScript 开发APP,爬了无数坑之后总算弄出来个结果,重要的地方记录下,后面会附上示例代码: 1.开发工具的选择 windows 平台我接触的 ...

  4. .Net 生成条形码

    1,下面一个类,可以直接复制下去使用: public class Code39    {        private Hashtable m_Code39 = new Hashtable();    ...

  5. OpenVPN客户端证书合并到配置文件中

    这里只讲OpenVPN客户端证书合并到配置文件中,避免文件太多,管理不便! 生成的客户端证书和配置文件,客户端需要的一共有5个文件:ca.crt.client.crt.client.key.ta.ke ...

  6. GOPS2017全球运维大会深圳站 出席嘉宾盘点!

    去年,GOPS全球运维大会在深圳出发,当时门票提前几周收盘,2017年,承载着运维人的期望,GOPS全球运维大会再次来到了深圳.第六届GOPS2017全球运维大会深圳站(本次)将于2017年4月21日 ...

  7. linux看代码方法和建议

    http://blog.csdn.net/lxl584685501/article/details/46803077

  8. android 实现与服务器的长链接 方式

    http://blog.csdn.net/coffeeco/article/details/13276437  这边文章主要看服务端,使用tomcat7以上实现服务端的接收消息以及消息发送 http: ...

  9. Hadoop无法上传文件查找原因

    部署了集群,上传测试文件到HDFS文件系统的时候出现问题.could only be replicated to 0 nodes, instead of 1,如下图所示: 度娘寻找解决方案: 博客链接 ...

  10. C# 语言规范_版本5.0 (第11章 结构)

    1. 结构 结构与类的相似之处在于,它们都表示可以包含数据成员和函数成员的数据结构.但是,与类不同,结构是一种值类型,并且不需要堆分配.结构类型的变量直接包含了该结构的数据,而类类型的变量所包含的只是 ...