`

Hql sqlQuery

阅读更多

准备:

两个表(实体), 1对多双向关联:

班级: Clazz (id, name)

学生: Student(id, name , class_id)

1. 查询持久化对象  

1.1 简单查询,返回数据库结构
 sql = "select c.* from clazz c,student s where s.class_id = c.id";   

 List<Clazz> clazzs = (List<Clazz>)session.createSQLQuery(sql).list();

特别注意:返回结果是Object[]组成的List,通过Object下标访问属性

使用场合:非基于对象的查询,复杂查询

1.2 简单查询,返回持久化对象

  sql = "select c.* from Clazz c , student s where s.class_id = c.id ";    List<Clazz> clazzs = (List<Clazz>) session.createSQLQuery(sql).addEntity(Clazz.class).list();

特别注意: 1.addEntity方法指定返回包含Clazz对象的List 2. 查询出来的持久态对象,clazz对象的studets属性是各代理对象,访问的时候才会去查询DB 使用场合:基于对象的查询,但对象简单查询

1.3 多表查询,返回多个实体
String sql = "select {c.*}, {s.*} from Clazz c , student s where s.class_id = c.id   ";

List<Clazz> clazzs = (List<Clazz>) session().createSQLQuery(sql)

                                 .addEntity("c", Clazz.class)

                                 .addEntity("s", Student.class).list();
特别注意: 
1. addEntity方法指定了当前返回实体的别名,而且在SQL语句里使用{c.*}这样的语句,
它的意思是向别名为c的这个对象注入所有属性值.
2. 这个查询会返回一个Object的List,每个Object包含两个对象一个Clazz,一个Student
3. {}占位符里是对象的属性,而非列名,如{s.class},而非{s.class_id}
4. 必须注入对象的每个属性值,你可以使用{c.*},或者手工写全所有,但必须是所有属性。(这个太让我郁闷了。 
使用场合:基于对象的查询,复杂查询

1.4  多表查询,返回关联实体

String sql = "select {c.*}, {s.*} from Clazz c , student s where s.class_id = c.id   ";

List<Clazz> clazzs = (List<Clazz>) session().createSQLQuery(sql)

		.addEntity("c", Clazz.class)

		.addJoin("s", "c.students").list();

特别注意: 这块有些问题,明明应该返回Clazz的List的,但确返回包含Clazz和Student的Object的List, faint

使用场合:基于对象的查询,复杂查询

2. 查询托管对象

String sql = "select c.id, c.name from Clazz c , student s where s.class_id = c.id   ";   

List<Clazz> clazzs = (List<Clazz>) session.createSQLQuery(sql)      

                                     .addScalar("id", Hibernate.LONG)

                                     .addScalar("name", Hibernate.STRING)     

                                     .setResultTransformer(Transformers.aliasToBean(Clazz.class)).list();

特别注意:

1. 如果不设置addScalar方法可能会报转型错误的异常.

2.托管查询可以使用投影,只查询指定的列属性

分享到:
评论

相关推荐

    Hibernate SQLQuery执行原生SQL.docx

    这里创建的SQLQuery对象允许我们执行任意的SQL语句,而不是局限于Hibernate的HQL查询语言。 二、设置查询参数 设置查询参数可以通过setParameter方法完成,它接受两个参数:一个是参数的索引(从0开始),另一个是...

    HQL与SQL的区别

    在IT领域,特别是数据库操作和查询语言中,HQL(Hibernate Query Language)与SQL(Structured Query Language)是两个重要的概念,它们各自拥有独特的特性和应用场景。本文将深入探讨HQL与SQL之间的区别,帮助读者...

    hibernate sql query.pdf

    hibernate sql hqlsql

    监控sql输出-可以查看hql转成sql的结果值

    标题中的“监控SQL输出-可以查看HQL转成SQL的结果值”指的是在使用HQL(Hibernate Query Language)进行数据库操作时,如何通过某些工具或手段来观察这些高级查询语句被转换成底层数据库能理解的SQL语句的过程,并对...

    Hibernate+本地SQL查询SQLQuery.pdf

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

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

    在某些情况下,开发者可能需要使用原生SQL查询来执行特定的数据库操作,这时就可以利用Hibernate的SQLQuery功能。本文将详细讲解如何使用Hibernate的SQLQuery进行本地SQL查询。 首先,创建SQLQuery实例是通过...

    HQL与SQL的区别[文].pdf

    HQL(Hibernate Query Language)是一种基于对象的查询语言,主要用于 Hibernate 框架中对数据库的查询操作。与 SQL 相比,HQL 的查询方式和语法都有所不同。 首先,HQL 的查询目标是对象,而不是数据库表。因此,...

    HQL(Hibernate Query Language):

    Hibernate Query Language(HQL)是Hibernate框架中用于操作对象关系映射(ORM)的一种查询语言。它是面向对象的,设计目的是让开发人员可以使用对象而不是数据库表进行查询,从而简化了与数据库交互的过程。HQL的...

    HQL批量插入、更新和删除

    Query query = session.createQuery(hql); query.setParameter("newPassword", newPassword); query.setParameter("userId", userId); int rowsAffected = query.executeUpdate(); ``` ##### 2. 删除操作 - *...

    hql语句 使用大全

    HQL(Hibernate Query Language)是一种面向对象的查询语言,它提供了灵活而强大的数据检索方式,使开发人员能够更高效地与数据库交互。本文将详细介绍HQL的基本用法及高级特性。 #### 1. 查询所有记录(Select) ...

    Hibernate-HQL-查询-Query资料

    在Hibernate中,HQL(Hibernate Query Language)是专为ORM设计的一种面向对象的查询语言,它允许开发者以类和对象的方式进行数据查询,而不是直接使用SQL。本资料主要涵盖了Hibernate HQL查询的基本概念、语法以及...

    Hibernate_NSQL&HQL增删改操作

    #### NSQL(Native SQL)与HQL(Hibernate Query Language) 在Hibernate框架中,进行数据库操作时,开发者可以选择使用两种不同的查询语言:NSQL(Native SQL)和HQL(Hibernate Query Language)。这两种查询方式...

    全面解析HQL语句 非常详细直接的HQL语句的功能介绍

    本篇文章将深入探讨HQL(Hibernate Query Language)的核心功能及其在数据查询方面的强大能力。HQL是一种面向对象的查询语言,用于在Hibernate框架中执行数据检索任务。它允许开发人员以一种接近Java语言的方式进行...

    HQL语句大全HQL语句大全

    HQL(Hibernate Query Language)是Hibernate框架中的查询语言,它提供了面向对象的方式来进行数据库查询。HQL语法接近于SQL但又有所不同,它允许开发者以面向对象的方式来表达查询逻辑,使得查询更加直观且易于理解...

    HQL语法入门学习HQL语法入门学习

    与SQL(Structured Query Language)不同,HQL是专为ORM(Object-Relational Mapping)设计的,它允许开发者以类和对象的方式而不是数据库表和字段来编写查询。 在Java开发中,Hibernate作为一个流行的ORM工具,...

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

    SQLQuery query = session.createSQLQuery(sql); query.addEntity(User.class); List&lt;User&gt; users = query.list(); ``` 原生SQL查询可以返回结果集、单个值或自定义的结果类型。但需要注意的是,这种方式可能会丢失...

    Hibernate-HQL.rar_HQL_hibernate hql

    本篇文档将深入探讨Hibernate中的HQL(Hibernate Query Language),一种面向对象的查询语言,它提供了与SQL类似的语法,但更贴近于面向对象的思维模式,使得开发者可以更加便捷地进行数据查询。 一、HQL简介 HQL是...

    Hibernate HQL命名参数和Query接口的分页

    在Java的持久化框架Hibernate中,HQL(Hibernate Query Language)是用于操作对象关系映射(ORM)的SQL方言,提供了更加面向对象的查询方式。本篇将详细讲解HQL中的命名参数以及如何通过Query接口实现分页查询,这...

    HQL查询pdf资料

    HQL(Hibernate Query Language)是一种面向对象的查询语言,它提供了与SQL类似的功能,但更贴近于面向对象编程的思维方式。HQL允许开发人员以一种更自然的方式查询数据库,同时保持了Java对象模型的一致性。 #### ...

Global site tag (gtag.js) - Google Analytics