`
hpjianhua
  • 浏览: 240938 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

HQL实用技术

阅读更多
Fb HQL实用技术

实体查询

简单例子:
String hql = "from User";
Query query = session.createQuery(hpl);
List userList = query.list();

上面的hql:"from User",将取出User的所有对应记录,对应的SQL为"select ..from User".
我们也可以在HQL中采用全路径名,特别是在应用中存在同名类(包名不同)的情况下使用,
如:
"from com.hpjianhua.hibernate.entity.User"

注意:HQL子句本身大小写无关,但是其中出现的类名与属性名必须注意是大小写区分的,
Hibernate中,查询的目标实体存在着继承关系的判定,如:"from User"将返回所有User以及
基子类的记录.

查询时的限定:
String hql = "from User as user where user.name='Hpjianhua'";
Query query = session.createQuery(hql);
List userList = query.list();
这里我们新引入了两个子句"as" 与"where",as 子句为类名创建了一个别名,而where子句指定了限定条件.其中as子句可忽略.如:
"from User user where user.name='hpjianhua'";

属性查询:
查询非完整实体对象(查询单个属性):
List list = session.createQuery("select user.name from User user").list();
查询多个属性:
List list = session.createQuery("select user.name,user.age from User user").list();
返回的是一个Object数组对象.
则:
Iterator it = list.iterator();
while(it.hasNext()){
Object[] results = (Object[])it.next();
System.out.println(results[0]);
System.out.println(results[1]);
}

如果觉得返回数组的方式不够面向对象的风格,我们也可以通过在HQL中动态构造对象实例的方法对这些平面化的数据进行封装.如:
List list = this.session.createQuery("select new User(user.nage,user.age) from User as user").list();

我们也可以在HQL的Select子句中使用统计函数:
List list = session.createQuery("select count(*),min(user.age) from User as user").list();
甚至原生SQL函数,如:
select upper(user.name) from User as user;
或者利用distinct 关键字,去掉返回集中的重复记录.
select distinct user.name from User as user;

实体的更新与删除
更新实例:
Transaction tx = session.beginTransaction();
String hql = "update User set age =19 where id=1";
Query query = session.createQuery(hql);
query.executeUpdate();
tx.commit():

删除实例:
Transaction tx = session.beginTransaction();
String hql = "delete User where age =19";
Query query = session.createquery(hql);
int ret =query.executeUpdate();
System.out.println("Delete records =>"+ret);
tx.commit();

分组与排序

Order by 子句
与SQL类似,HQL通过order by 子句实现 对查询的结果排序,如:
from User user order by user.name
Order by 子句是可以指定多个排序条件的:
from User user order by user.name ,user.age desc;
Group by 子句:
String hql="select count(user),user.age from User user group by user.age";

参数绑定
String hql="from User where name=:name and age=:age";
Query query = session.createQuery(hql);

引用查询
Hibernate 提供了可配置化的内置支持
我们可以在映射文件中,通过query节点定义查询语句(与class节点同级):

<hibernate-mapping package="com.hpjianhua.web">
<class name="Item" table="t_items">
<id name="itemNo">
<generator class="assigned"/>
</id>
<property name="itename="queryByName">
<![CDATA[
from User user where user.name=:name
]]>
</query>
</hibernate-mapping>


然后,我们通过Session.getNamedQuery方法从配置文件中调用对应的HQL,如:

Query query = session.getNamedQuery("queryByName");

联合查询

1.inner join
2.left outer join
3.right outer join
4.full join(not usually useful)

数据加载方式

Hibernate支持以下几种数据加载方式:
即时加载(Immediate Loading)
当实体加载完成后,立即加载其关联数据
延迟加载(Lazy Loading)
实体加载时,其关联数据并非马上获取,而是当关联数据第一次被访问时再进行读取.
预先加载(Eager Loading)
预先加载时,实体及其关联对象同时读取,这与即时加载类似,不过实体及其关联数据是通过一条SQL语句(基于外连接[outer join])同时读取.
批量加载(Batch Loading)
对于即时加载与延迟加载,可以采用批量加载方式进行性能上的优化










分享到:
评论

相关推荐

    03-HQL实用技术.pdf

    ### HQL实用技术知识点概述 #### 一、配置关联关系 **1.1 单向一对多关联关系** - **定义**: 单向一对多关联指的是一个父对象可以拥有多个子对象,但子对象并不知道它的父对象是谁。 - **配置方法**: - 在父对象...

    HQL 实用技术

    HQL 实用技术

    hql总条数.txt

    根据给定的文件信息,我们可以深入探讨HQL(Hibernate Query Language)在查询数据库记录总数中的应用,以及如何在Java环境中使用...通过深入理解和熟练掌握HQL查询技巧,可以显著提高数据库操作的效率和程序的健壮性。

    HQL查询及语法

    ### HQL查询及语法详解 ...总之,掌握HQL对于任何从事Java Web开发的技术人员来说都是至关重要的。它不仅提高了数据库操作的效率,还使得代码更加简洁、易于理解和维护,是连接Java对象世界与数据库世界的桥梁。

    Hibernate 课件_HQL

    ### Hibernate 课件_HQL 知识点解析 #### HQL查询 ...这些知识点涵盖了HQL的基本概念、查询方法、各种高级查询技巧以及Session的管理等方面,希望能够帮助大家更好地理解和掌握Hibernate的HQL查询技术。

    Hibernate教程(数据查询)HQL,PDF格式

    - 《Java Persistence with Hibernate》:由Christian Bauer等人编写的书籍,涵盖了Hibernate的高级主题,包括HQL的高级使用技巧。 总之,Hibernate和HQL是现代Java应用程序中不可或缺的一部分,了解并熟练掌握这些...

    HQL批量插入、更新和删除

    - **批量更新**:对于批量更新操作,可以使用HQL的`UPDATE`语句。例如,要更新所有用户的密码,可以执行如下HQL语句: ```java String hql = "UPDATE User SET password = :newPassword WHERE id = :userId"; ...

    hql模糊查询hql模糊查询

    根据提供的文件信息,本文将详细解析HQL(Hibernate Query Language)中的模糊查询技术,并通过具体的代码示例来阐述不同方式下的实现方法。 ### HQL模糊查询概述 HQL是Hibernate框架提供的一种面向对象的查询语言...

    HQL与SQL的区别

    这意味着,HQL允许使用类名和属性名来代替表名和列名,使得查询更符合面向对象的编程思想。 SQL则是一种纯粹的关系型查询语言,它的设计完全围绕着关系型数据库的概念,如表、列、行等。SQL查询通常直接针对数据库...

    hql多表查询

    HQL允许开发者使用类似SQL的语法进行数据库操作,但更贴近于面向对象的编程思想。本文将深入探讨HQL多表查询的核心概念、语法结构以及实际应用案例。 ### HQL多表查询的基础概念 HQL支持多种查询方式,包括单表...

    hibernate hql大全

    **Hibernate HQL 全攻略** Hibernate Query Language(HQL)是Hibernate框架提供的面向对象的查询语言,它允许开发者以类和属性的名称进行查询,...学习并实践这些HQL技巧,将极大地提升你在Java持久层开发中的能力。

    hql的增删改查

    对于大数据量的情况,推荐使用分页技术。 **代码示例:** ```java public List&lt;Item&gt; getAllItems(int pageNo, int pageSize) { Session session = this.getCurrentSession(); String hql = "FROM Item"; Query...

    hql分页

    本篇文章将深入探讨HQL(Hibernate Query Language)中的分页技术,结合源码分析和实用工具,帮助你理解和实现HQL的分页功能。 HQL是Hibernate框架提供的面向对象的查询语言,它类似于SQL,但直接操作对象和类,而...

    HQL语言教程[归类].pdf

    《HQL语言教程[归类].pdf》是一个关于Hibernate Query Language(HQL)的详细教程,专注于面向对象的查询技术。HQL是Hibernate框架中用于检索和操作对象关系映射数据的强大工具,其语法和SQL有诸多相似之处,但设计...

    NHibernate HQL 条件查询

    而HQL则是NHibernate提供的一种查询语言,它允许开发人员使用类似于SQL的语法来查询数据库,同时保持了面向对象的特性。 ### NHibernate HQL条件查询详解 #### QBC(Query By Criteria)与HQL对比 在NHibernate中...

    Hibernate_HQL大全

    我们可以使用以下HQL查询: ```hql SELECT cat, mate, kittens FROM Cat as cat LEFT JOIN FETCH cat.mate as mate LEFT JOIN FETCH cat.kittens as kittens WHERE cat.type = '特定类型' ``` 在这个查询中,我们...

    hibernateHQL基本查询

    与传统的 JDBC 方式相比,使用 HQL 进行数据库查询更加便捷、高效且易于维护。 #### 二、HQL 与 SQL 的区别 - **面向对象**:HQL 主要是基于对象的查询,而 SQL 是基于表的查询。 - **语法差异**:虽然 HQL 的语法...

Global site tag (gtag.js) - Google Analytics