对原生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()方法,但是这种方法不常用,所以这里也不赘述了。
分享到:
相关推荐
总结,Hibernate的SQLQuery接口提供了对原生SQL查询的强大支持,我们可以方便地设置查询参数、处理查询结果,甚至自定义结果集的转换方式。通过灵活运用这些功能,开发者可以在保持ORM优势的同时,处理那些不适合HQL...
SQLQuery query = session.createSQLQuery(sql); // 设置参数绑定 query.setParameter("param1", value1); query.setParameter("param2", value2); List[]> result = query.list(); ``` 八、总结 通过XML配置SQL和...
这篇博客"Hibernate SQLQuery 本地查询"可能详细讲解了如何利用Hibernate的SQLQuery类来执行SQL查询,以及如何在实际项目中结合BaseDaoSupport类实现数据访问。 首先,让我们理解SQLQuery的基本用法。在Hibernate中...
总之,Hibernate的SQLQuery接口提供了一种灵活的方式来执行原生SQL查询,并将结果映射到Java对象。通过使用别名、结果集映射和命名SQL查询,开发者可以处理复杂的数据库交互,同时保持代码的清晰和整洁。
Hibernate 提供了多种方式来执行原生 SQL 语句,其中之一是使用 `Session.createSQLQuery()` 方法,该方法返回一个 `SQLQuery` 对象,该对象提供了执行原生 SQL 语句的方法。 例如,我们可以使用以下代码来执行一个...
在Java的持久化框架Hibernate中,有时我们需要使用原生的SQL查询来实现特定的数据库操作,这时就需要利用到SQLQuery接口。本篇文章将详细解析如何使用Hibernate的SQLQuery来进行本地SQL查询,并探讨其各种应用场景。...
SQLQuery query = session.createSQLQuery("SELECT * FROM User"); List results = query.list(); ``` 这种方法可以自由地编写任何有效的SQL,但需要手动映射查询结果到Java对象。如果返回结果需要映射到实体类...
SQLQuery query = session.createSQLQuery(sql); ``` 如果查询返回的是单个对象,我们可以使用`addEntity()`方法指定结果应映射到的实体类: ```java query.addEntity(MyEntity.class); MyEntity result = ...
使用Native SQL查询,首先你需要在映射文件(.hbm.xml)中声明一个SQLQuery,如下所示: ```xml <sql-query name="-native_query"> <![CDATA[ SELECT * FROM your_table WHERE condition ]]> </sql-query> ```...
使用本地sql语句查询后,无需再使用Object对查询结果进行强制转换,而是直接将查询结果放到实体Bean里了。 PS: 其实只有一版,这里只所以叫最终版是因为该附件我上传了好几天传不上去,到最后报告说‘资源已经存在...
- `Session`接口:执行SQL查询的主要入口点,它是Hibernate的核心接口,提供了打开、关闭连接,以及执行查询的方法。 - `SQLQuery`对象:通过`Session.createSQLQuery()`方法创建,用于执行自定义SQL查询。 - ...
在 Hibernate 中,使用 SQLQuery 可以执行 Native SQL 查询,控制查询的执行是通过 SQLQuery 接口进行的,通过执行 Session.createSQLQuery() 获取这个接口。下面将详细介绍如何使用这个 API 进行查询。 标量查询...
### Hibernate SQLQuery 查询Oracle char类型结果为一个字符的解决方法 在使用Hibernate框架结合Oracle数据库进行数据查询时,经常会遇到一个问题:当查询的结果集中包含char类型的字段时,Hibernate可能会将其映射...
- **执行查询**:通过`Session`的`createSQLQuery`方法创建`SQLQuery`对象,并设置结果转换方式,最后执行查询并返回结果。 ```java SQLQuery query1 = session.createSQLQuery(sql); query1.addScalar("product...
Hibernate的核心在于它的Query API,它提供了Criteria、HQL(Hibernate Query Language)和JPQL(Java Persistence Query Language)等方式来构建SQL语句。Hibernate会根据这些查询语句动态生成对应的SQL,并执行在...
hibernate sql hqlsql
查询数据的方法有两种实现,一种是基于HQL(Hibernate Query Language),另一种是基于原生SQL。 - 基于HQL的通用查询: HQL是Hibernate提供的面向对象的查询语言,可以方便地操作对象和属性。`select`方法接收一个...
Criteria API是Hibernate提供的另一种查询方式,它提供了一种面向对象的查询接口,允许开发者动态构建查询。这种方法更加灵活,尤其在构建复杂的查询条件时。以下是一个简单的示例: ```java Session session = ...
3. **创建SQLQuery对象**:在Hibernate中,使用`Session`对象的`createSQLQuery()`方法创建`SQLQuery`对象,这个对象可以执行SQL语句。你可以传递读取到的SQL语句到这个方法。 4. **设置参数和类型**:如果SQL语句...
3. **执行SQL查询**:在Java代码中,我们可以使用SessionFactory的createSQLQuery方法来获取SQLQuery对象,然后调用其setParameters方法设置参数,最后调用list或uniqueResult等方法来执行查询: ```java Session ...