Hibernate使用原生SQL适应复杂数据查询
来源:互联网 发布:战争框架淘宝 编辑:程序博客网 时间:2024/06/08 03:41
HQL尽管容易使用,但是在一些复杂的数据操作上功能有限。特别是在实现复杂的报表统计与计算,以及多表连接查询上往往无能为力,这时可以使用SQL(Native SQL)实现HQL无法完成的任务。
1、使用SQL查询
使用SQL查询可以通过两种方式来实现:(1)、利用Hibernate提供的SQLQuery对象执行。即可以通过Session对象的createSQLQuery()方法获取。如:
1
2
3
4
5
String sql =
"select * from product limit 0,10"
;
SQLQuery query = session.createSQLQuery(sql);
List<Object[]> = query.list();
(2)、利用ResultMetaData对象来实现执行SQL语句,但是如果过多地使用这种方法就会对系统的性能产生影响,它将降低运行效率。通过addScalar()方法设置返回数据的类型可以减少ResultSetMetaData对象的使用而提高运行效率。如:
1
2
3
4
5
6
7
8
9
10
11
12
13
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();
获取SQL查询的持久对象有三种方式实现:
方式1:Hibernate不仅能把查询到的记录封装为包含多个Object数组的List对象返回,还可以把每一条查询到的记录封装成持久对象后返回包含这些对象的List对象。如:
1
2
3
4
5
6
7
String sql =
"select * from product limit 0,10"
;
SQLQuery sqlQuery = session.CreateSQLQuery();
sqlQuery.addEntity(Product .
class
);
List<Product> list = sqlQuery.list();
1
2
3
4
5
6
7
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();
1
2
3
4
5
6
7
8
9
10
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
));
List<Product> list = sqlQuery.list();
0 0
- Hibernate使用原生SQL适应复杂数据查询
- Hibernate使用原生SQL适应复杂数据查询
- Hibernate使用原生SQL适应复杂数据查询
- Hibernate 使用原生SQL进行查询
- Hibernate 中使用原生SQL 查询
- hibernate中使用原生sql查询
- Hibernate原生SQL查询
- hibernate 原生sql查询
- Hibernate原生SQL查询
- Hibernate原生SQL查询
- Hibernate原生SQL查询
- Hibernate原生SQL查询
- Hibernate原生SQL查询
- Hibernate原生SQL查询
- Hibernate书写原生SQL语句查询(用于复杂多表查询)
- Hibernate中原生sql查询多个表,数据映射
- Hibernate 使用原生SQL
- Hibernate 使用原生SQL
- Oracle Apex 实用笔记系列 5 - 在Apex把csv导入数据库Clob字段再导入到各自对应列的解决方法
- memcached全面剖析–5. memcached的应用和兼容程序
- hdu 1022
- typeof 详解
- Hadoop,HBase,Storm,Spark到底是什么?
- Hibernate使用原生SQL适应复杂数据查询
- String
- 简单水池&&迷宫问题
- spring简单的demo
- ubuntu 安裝Hadoop
- 简单的给mongodb添加用户和认证
- MongoDB数据库插入、更新和删除操作详解
- IOS笔记 #pragma mark的用法
- 二分——POJ3388