`
一日一博
  • 浏览: 229903 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Hibernate4之SQLQuery接口SQL方式查询

阅读更多

对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口。最简单的情况下,我们可以采用以下形式:

List cats = sess.createSQLQuery( "select * from cats").addEntity(Cat.class).list();


这个查询指定了:
SQL查询字符串
查询返回的实体

这里,结果集字段名被假设为与映射文件中指明的字段名相同。对于连接了多个表的查询,这就可能造成问题,因为可能在多个表中出现同样名字的字段。下面的方法就可以避免字段名重复的问题:

List cats = sess.createSQLQuery("select {cat.*} from cats cat").addEntity("cat", Cat.class).list();


这个查询指定了:
SQL查询语句,它带一个占位符,可以让Hibernate使用字段的别名.
查询返回的实体,和它的SQL表的别名.



addEntity()方法将SQL表的别名和实体类联系起来,并且确定查询结果集的形态。
addJoin()方法可以被用于载入其他的实体和集合的关联.

List cats = sess.createSQLQuery("select {cat}.name, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id ").addEntity("cat", Cat.class).addJoin("kitten", "cat.kittens").list();

还可以这样:
s.createSQLQuery("select * from tbl_user2 um").addEntity("um",UserModel.class);

原生的SQL按条件查询可以返回多个属性,形成Object[]
它将返回一个Object[]组成的List,Hibernate会使用ResultSetMetadata来判定返回的标量值的实际顺序和类型。你也可以使用scalar来明确指明类型

List rs = session.createSQLQuery("select * from TAB_ORDER t where t.id=1")
          .addScalar("money", LongType.INSTANCE).list();
//这里得到的是一个Long类型的List,而且是数据库中money这一列的值。
System.out.println(rs.get(0));

Session session = HibernateSessionFactoryUtil.getSessionFactory()
				.getCurrentSession();
	session.beginTransaction();
	Query q = session.createSQLQuery("select * from TAB_ORDER")
		.addScalar("id", LongType.INSTANCE)
		.addScalar("money", DoubleType.INSTANCE)
		.addScalar("orderno", StringType.INSTANCE)
		.addScalar("customerid", LongType.INSTANCE);
	List list = q.list();
	for (int i = 0; i < list.size(); i++) {
	//这里要用Object[]接收查出来的list中每一条数据
		Object[] obj = (Object[]) list.get(i);
		System.out.println(obj[0] + " * " + obj[1] + " * " + obj[2] + " * " + obj[3]);
	}
	session.getTransaction().commit();


命名SQL查询(不常用)
可以在映射文档中定义查询的名字,然后就可以象调用一个命名的HQL查询一样直接调用命名SQL查询.在这种情况下,就不需要调用addEntity()方法,但是这种方法不常用,所以这里也不赘述了。
分享到:
评论
1 楼 ice__apple 2013-05-21  
addScalar("id", LongType.INSTANCE)用不了额  addScalar("id", Hibernate.LONG)现在的我们用的那个hibernate3不推荐使用 Hibernate.LONG这种方式了,要用new Longtype() 

addScalar("id", LongType.INSTANCE)这个试了不行,求解

相关推荐

    Hibernate SQLQuery执行原生SQL.docx

    总结,Hibernate的SQLQuery接口提供了对原生SQL查询的强大支持,我们可以方便地设置查询参数、处理查询结果,甚至自定义结果集的转换方式。通过灵活运用这些功能,开发者可以在保持ORM优势的同时,处理那些不适合HQL...

    hibernate实现动态SQL查询

    SQLQuery query = session.createSQLQuery(sql); // 设置参数绑定 query.setParameter("param1", value1); query.setParameter("param2", value2); List[]&gt; result = query.list(); ``` 八、总结 通过XML配置SQL和...

    Hibernate SQLQuery 本地查询

    这篇博客"Hibernate SQLQuery 本地查询"可能详细讲解了如何利用Hibernate的SQLQuery类来执行SQL查询,以及如何在实际项目中结合BaseDaoSupport类实现数据访问。 首先,让我们理解SQLQuery的基本用法。在Hibernate中...

    Hibernate+本地SQL查询SQLQuery宣贯.pdf

    总之,Hibernate的SQLQuery接口提供了一种灵活的方式来执行原生SQL查询,并将结果映射到Java对象。通过使用别名、结果集映射和命名SQL查询,开发者可以处理复杂的数据库交互,同时保持代码的清晰和整洁。

    hibernate执行原生sql语句

    Hibernate 提供了多种方式来执行原生 SQL 语句,其中之一是使用 `Session.createSQLQuery()` 方法,该方法返回一个 `SQLQuery` 对象,该对象提供了执行原生 SQL 语句的方法。 例如,我们可以使用以下代码来执行一个...

    Hibernate+本地SQL查询SQLQuery.pdf

    在Java的持久化框架Hibernate中,有时我们需要使用原生的SQL查询来实现特定的数据库操作,这时就需要利用到SQLQuery接口。本篇文章将详细解析如何使用Hibernate的SQLQuery来进行本地SQL查询,并探讨其各种应用场景。...

    hibernate 执行原生sql的几种方式

    SQLQuery query = session.createSQLQuery("SELECT * FROM User"); List results = query.list(); ``` 这种方法可以自由地编写任何有效的SQL,但需要手动映射查询结果到Java对象。如果返回结果需要映射到实体类...

    hibernate将本地SQL查询结果封装成对象

    SQLQuery query = session.createSQLQuery(sql); ``` 如果查询返回的是单个对象,我们可以使用`addEntity()`方法指定结果应映射到的实体类: ```java query.addEntity(MyEntity.class); MyEntity result = ...

    Hibernate之原生Native SQL查询

    使用Native SQL查询,首先你需要在映射文件(.hbm.xml)中声明一个SQLQuery,如下所示: ```xml &lt;sql-query name="-native_query"&gt; &lt;![CDATA[ SELECT * FROM your_table WHERE condition ]]&gt; &lt;/sql-query&gt; ```...

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

    使用本地sql语句查询后,无需再使用Object对查询结果进行强制转换,而是直接将查询结果放到实体Bean里了。 PS: 其实只有一版,这里只所以叫最终版是因为该附件我上传了好几天传不上去,到最后报告说‘资源已经存在...

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

    - `Session`接口:执行SQL查询的主要入口点,它是Hibernate的核心接口,提供了打开、关闭连接,以及执行查询的方法。 - `SQLQuery`对象:通过`Session.createSQLQuery()`方法创建,用于执行自定义SQL查询。 - ...

    Native SQL查询 (使用SQLQuery).doc

    在 Hibernate 中,使用 SQLQuery 可以执行 Native SQL 查询,控制查询的执行是通过 SQLQuery 接口进行的,通过执行 Session.createSQLQuery() 获取这个接口。下面将详细介绍如何使用这个 API 进行查询。 标量查询...

    Hibernate SQLQuery 查询Oracle char类型结果为一个字符解决方法

    ### Hibernate SQLQuery 查询Oracle char类型结果为一个字符的解决方法 在使用Hibernate框架结合Oracle数据库进行数据查询时,经常会遇到一个问题:当查询的结果集中包含char类型的字段时,Hibernate可能会将其映射...

    Hibernate中Sql语句

    - **执行查询**:通过`Session`的`createSQLQuery`方法创建`SQLQuery`对象,并设置结果转换方式,最后执行查询并返回结果。 ```java SQLQuery query1 = session.createSQLQuery(sql); query1.addScalar("product...

    Hibernate生产SQL语句

    Hibernate的核心在于它的Query API,它提供了Criteria、HQL(Hibernate Query Language)和JPQL(Java Persistence Query Language)等方式来构建SQL语句。Hibernate会根据这些查询语句动态生成对应的SQL,并执行在...

    hibernate sql query.pdf

    hibernate sql hqlsql

    hibernate数据库通用SQL代码

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

    Hibernate中的查询:HQL、Criteria、原生SQl

    Criteria API是Hibernate提供的另一种查询方式,它提供了一种面向对象的查询接口,允许开发者动态构建查询。这种方法更加灵活,尤其在构建复杂的查询条件时。以下是一个简单的示例: ```java Session session = ...

    hibernate执行外部sql

    3. **创建SQLQuery对象**:在Hibernate中,使用`Session`对象的`createSQLQuery()`方法创建`SQLQuery`对象,这个对象可以执行SQL语句。你可以传递读取到的SQL语句到这个方法。 4. **设置参数和类型**:如果SQL语句...

    Hibernate调用配置文件中的sql语句

    3. **执行SQL查询**:在Java代码中,我们可以使用SessionFactory的createSQLQuery方法来获取SQLQuery对象,然后调用其setParameters方法设置参数,最后调用list或uniqueResult等方法来执行查询: ```java Session ...

Global site tag (gtag.js) - Google Analytics