Hibernate使用原生SQL适应复杂数据查询
2014-12-11 13:09
405 查看
HQL尽管容易使用,但是在一些复杂的数据操作上功能有限。特别是在实现复杂的报表统计与计算,以及多表连接查询上往往无能为力,这时可以使用SQL(Native SQL)实现HQL无法完成的任务。
1、使用SQL查询
使用SQL查询可以通过两种方式来实现:
(1)、利用Hibernate提供的SQLQuery对象执行。即可以通过Session对象的createSQLQuery()方法获取。如:
?
注意:查询结果返回的是一个Object的数组。
(2)、利用ResultMetaData对象来实现执行SQL语句,但是如果过多地使用这种方法就会对系统的性能产生影响,它将降低运行效率。通过addScalar()方法设置返回数据的类型可以减少ResultSetMetaData对象的使用而提高运行效率。如:
?
2、返回SQL查询的持久对象
获取SQL查询的持久对象有三种方式实现:
方式1:Hibernate不仅能把查询到的记录封装为包含多个Object数组的List对象返回,还可以把每一条查询到的记录封装成持久对象后返回包含这些对象的List对象。如:
?
方式2:使用大括号指定查询的字段,然后通过SQLQuery对象对象的addEntity()方法关联SQL中的别名和持久化类确定要返回的List对象中的每个元素类型。如:
?
方式3:同时使用SQLQuery对象的addScalar()方法和Transformers对象的aliasToBean()方法关联数据库的表与持久化类确定返回记录的各个字段与持久化类属性的对象对应关系。如:
?
1、使用SQL查询
使用SQL查询可以通过两种方式来实现:
(1)、利用Hibernate提供的SQLQuery对象执行。即可以通过Session对象的createSQLQuery()方法获取。如:
?
(2)、利用ResultMetaData对象来实现执行SQL语句,但是如果过多地使用这种方法就会对系统的性能产生影响,它将降低运行效率。通过addScalar()方法设置返回数据的类型可以减少ResultSetMetaData对象的使用而提高运行效率。如:
?
获取SQL查询的持久对象有三种方式实现:
方式1:Hibernate不仅能把查询到的记录封装为包含多个Object数组的List对象返回,还可以把每一条查询到的记录封装成持久对象后返回包含这些对象的List对象。如:
?
?
?
相关文章推荐
- Hibernate使用原生SQL适应复杂数据查询
- Hibernate使用原生SQL适应复杂数据查询
- Hibernate使用原生SQL多表查询时字段名相同导致查询数据覆盖问题解决办法
- Hibernate 使用原生SQL进行查询
- 简单修改Hibernate源码,增加使用原生SQL查询时动态addEntity和addScalar功能
- jpa或bernate使用原生sql进行关联查询org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join
- Hibernate中使用SQL处理复杂的查询语句(on calsue)
- Hibernate使用原生的动态sql实现带条件的查询分页功能
- hibernate在使用sql查询query自动转化成model类型数据,query.addEntity
- hibernate中使用原生sql查询
- Hibernate中使用原生的sql语句进行查询操作
- Hibernate3.2.6 原生sql 查询使用方法,将查询结果直接转换为POJO,不必非要指定属性大写
- SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题
- Hibernate原生SQL查询数据转换为HQL查询数据方法
- hibernate使用原生SQL查询返回结果集的处理
- hibernate使用原生sql查询Hibernate原生SQL多表查询字段名重复问题以及解决方法
- hibernate使用原生的sql,解决管理查询、结果集封装等问题
- Hibernate 使用原生SQL查询oracle数据库显示问题(char,Date)
- Hibernate 使用原生SQL查询无法使用别名问题
- 关于Hibernate在使用原生SQL语句多表查询所遇到的问题