`

Hibernate HQL示例五:原生SQL语句查询

阅读更多

 使用:session.createSQLQuery

注意:这里对应的就是查询表名了.. 

 

package com.bjsxt.hibernate;

import java.util.Iterator;
import java.util.List;

import org.hibernate.SQLQuery;
import org.hibernate.Session;

import junit.framework.TestCase;

/**
 * 嵌入原生sql测试
 * @author Administrator
 *
 */
public class SqlQueryTest extends TestCase {
	
	public void testQuery1() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			
			SQLQuery sqlQuery = session.createSQLQuery("select * from t_student");
			List students = sqlQuery.list();
			for (Iterator iter = students.iterator();iter.hasNext();) {
				Object[] obj = (Object[])iter.next();
				System.out.println(obj[0] + ", " + obj[1]);
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			HibernateUtils.closeSession(session);
		}				
	}
	
}

 

 

转载返回对象的结果集: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)); 

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

 

分享到:
评论

相关推荐

    Hibernate中Sql语句

    在Java开发中,Hibernate作为一个非常流行的ORM框架,提供了多种查询方式,其中就包括了HQL(Hibernate Query Language)和原生SQL查询。本文将针对给定代码片段中的核心知识点——如何在Hibernate中使用原生SQL而非...

    hibernate 查询?Hibernate的HQL查询

    【描述】:在ORM框架Hibernate中,数据查询和检索是一个核心功能,它提供了多种查询方式,包括标准化对象查询(Criteria Query)、Hibernate查询语言(HQL)和原生SQL查询。其中,HQL作为官方推荐的查询方式,具有...

    JPA--HQL查询(手动写原生查询sql,复杂查询必备).pdf

    JPA--HQL查询(手动写原生查询sql,复杂查询必备) JPA(Java Persistence API)是一种JavaEE标准,用于持久化数据,HQL(Hibernate Query Language)是 Hibernate 框架提供的一种查询语言,它允许开发者使用面向...

    HQL是hibernate自己的一套查询

    虽然HQL提供了很多便利的功能,但在某些情况下可能还需要直接使用原生SQL语句。Hibernate也支持这种方式。 ```java Session session = HibernateUtil.getSession(); Query q = session.createSQLQuery("SELECT * ...

    hibernate将本地SQL查询结果封装成对象(最终).zip

    原生SQL查询允许开发者直接执行SQL语句,而HQL则是面向对象的查询语言,类似于SQL但更接近于Java。 4. 封装SQL查询结果为对象: - `Session`接口:执行SQL查询的主要入口点,它是Hibernate的核心接口,提供了打开...

    Hibernate_NSQL&HQL增删改操作

    NSQL指的是原生SQL语句,即直接使用的SQL语句。在Hibernate中,可以通过`createSQLQuery()`方法来执行NSQL语句。这种方式适用于那些无法通过HQL表达的复杂查询或者需要与特定数据库特性紧密结合的情况。 **示例代码...

    HQL语句大全

    除了HQL,Hibernate还支持原生SQL查询。下面的代码示例演示了如何使用原生SQL执行查询: ```java public ArrayList select(String sql) throws Exception { Session session = HibernateSessionFactory.current...

    hibernate数据库通用SQL代码

    查询数据的方法有两种实现,一种是基于HQL(Hibernate Query Language),另一种是基于原生SQL。 - 基于HQL的通用查询: HQL是Hibernate提供的面向对象的查询语言,可以方便地操作对象和属性。`select`方法接收一个...

    SQL语句封装

    SQL语句封装是指将复杂的、重复的SQL查询语句进行抽象和封装,以便在需要的时候方便调用,提高代码的可读性、可维护性和复用性。这一技术在开发过程中广泛应用,尤其是在大型项目或团队协作中。 **1. SQL语句封装的...

    关于Hibernate分页类和jdbc的sql分页完美融合

    Hibernate提供了一种方便的方式来处理分页查询,通过Criteria、HQL或Query接口的setFirstResult和setMaxResults方法。这些方法允许我们指定从哪个结果开始以及最多返回多少结果,从而实现分页。例如: ```java ...

    常用的HQL语句下载

    在本文中,我们将深入探讨HQL(Hibernate Query Language),一种专为Hibernate ORM框架设计的查询语言,用于在Java应用程序中操作...在实际应用中,根据项目需求和性能考虑,有时可能需要在HQL和原生SQL之间做出选择。

    hibernate 调用oracle函数

    4. **定义Hibernate Native SQL查询**:由于Hibernate默认不支持调用存储过程或函数,我们需要使用`@NamedNativeQuery`或`@SqlResultSetMapping`注解来定义一个原生SQL查询,用于调用Oracle函数。例如: ```java @...

    hibernate语句大全

    以上介绍了Hibernate中几种常见的查询方式,包括HQL、QBC、原生SQL以及一些高级查询技巧如分组、排序等。掌握这些基本操作可以帮助开发者更高效地使用Hibernate框架进行数据访问操作。随着实践经验的积累,还可以...

    Hibernate查询解决方案

    - **SQL 查询**:Hibernate 也支持原生 SQL 查询,可以通过 `createSQLQuery` 方法实现。 ```java SQLQuery query = session.createSQLQuery("SELECT * FROM user WHERE name = ?"); query.setString(0, name); ...

    com.microsoft.sqlserver.jdbc.SQLServerException: 只进结果集不支持请求的操作 解决方案

    另一种方法是使用原生SQL查询,这样可以直接控制SQL语句的生成,包括使用LIMIT和OFFSET关键字(对于MySQL等数据库)或ROW_NUMBER()函数(对于SQL Server)来实现分页。这同样可以绕过Hibernate的默认只进结果集行为...

    hibernate的查询方式介绍和hibernate的批处理和连接池配置hibernate

    - 定义 HQL 查询语句: ```xml &lt;query name="findStudentById" query="from Student where stuId=:id"/&gt; ``` - 调用: ```java Query query = session.getNamedQuery("findStudentById"); query....

    hibernate资源文档

    Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,而无需编写大量的SQL语句。在Java应用中,Hibernate极大地简化了数据持久化的复杂度,使得开发人员能够更加专注于...

    占位符查询

    - `Query`主要用于执行HQL或原生SQL查询。 - `Criteria`则是基于标准的SQL查询语法,更加灵活,适用于构建复杂的查询条件。 4. **占位符查询**:在构造SQL或HQL语句时,可以使用参数化查询(即占位符查询),这种...

    hibernate立体结构文档

    4. 查询:HQL、Criteria API或原生SQL查询,获取数据并转化为Java对象。 六、级联操作与缓存 1. 级联操作:通过@Cascade注解,可以在父对象的操作中自动处理子对象的CRUD。 2. 缓存:Hibernate提供了第一级缓存...

    hibernate查询

    在 Hibernate 中进行查询是其核心功能之一,本文将详细介绍 Hibernate 的几种查询方式,包括 HQL (Hibernate Query Language) 查询、QBC (Query By Criteria) 查询以及 QBE (Query By Example) 查询,并结合示例代码...

Global site tag (gtag.js) - Google Analytics