`
yangshen998
  • 浏览: 1303379 次
文章分类
社区版块
存档分类
最新评论

HQL分析总结

 
阅读更多

HQL分析总结

HQL(Hibernate Query Language)

面向对象的查询语言,于SQL不同,HQL中的对象名是区分大小写的(和属性其他部分不区分大小写);HQL中查的是对象而不是和表,并且HQL主要通过Query来操作,Query的创建方式:

Queryq=session.createQuery(hql);

1、实体查询

lfromPerson

lfromUser user where user.name=:name

lfromUser user where user.name=:name and user.birthday<:birthday

lfromUser user where user.age between 20 and 30;

lfromUser user where user.age in (20,30);

lfromUser user where user.name is null;

lfromUser user where user.name like ’%zx%’;

lfromUser user where (user.age%2)=1;

lfromUser user where user.age=20 and user name like ‘%zx%’;

2、实体的更新和删除

这项技术功能是Hibernate3的新加入的功能,在Hibernate2重视不具备的。

Transactiontrans=session beginTransaction();

String hql=”updateUser user set user age=20 whereuser age=18”;

Queryqueryupdate=session.createQuery(hql);

Intret=queryupdate executeUpdate();

Trans commit();

通过这种方式我们可以再Hibernate3中,一次性王成批量数据的更新,对性能的提高是相当的可观。同样可以通过类似的方式来完成delete操作,如下面的代码:

Transactiontrans=session beginTransaction();

String hql=”deletefrom User user where user age=18”;

Queryqueryupdate=session createQuery(hql);

Intret=queryupdate executeUpdate();

Trans commit();

这种操作方式在Hibernate3中称为bulkdelete/update,这种方式能够在很大程度上提高操作的灵活性和运行效率,但是采用这种方式极有可能引起缓存同步上的问题。

3、属性查询

很多时候我们在检索数据是,并不需要获得实体对象所对应的全部数据,而只需要检索实体对象的部分所对应的数据。这时候就可以利用HQL属性查询技术,如下面程序示例:

List list=sessioncreateQuery(“select user name from User user”);

List();

For(int i=0){

System.outprint(list get(i));

}

上面的代码质监所了User实体的name属性对应的数据,此时返回的包含结果集的list中每个条目都是String类型的name属性对应的数据。也可以以此检索多个属性:

List list=sessioncreateQuery(“select user name;user age from User user”);

List();

For(inti=0;i<list length();i++){

Object[]obj=(Object[])

List get(i);

System.out.println(obj[0]);

System.out.println(obj[1]);

}

此时返回的结果集list中,所包含的每个条目都是一个Object[]类型,其中包含对应的属性数据值。作为当今我们这一代深受面向对象思想影响的开发人员,可能会觉得上面返回Object[]不够符合面向对象风格,这时我们可以利用HQL提供的动态构造实例的功能对这些平面数据进行封装,如下面的程序代码:

  List list=session createQuery(“select newUser(user name,user age) from User user ”)

  list();

  for(int i=0;i<list length();i++){

  User user=(User)list get(i);

  System out println(user getName());

  System out println(user getAge());

  }

  这里我们通过动态构造实例对象,对返回结果进行了封装,使我们的程序更加符合面向对象风格,但是这里有一个问题必须注意,那就是这时所返回的User对象,仅仅只是一个普通的Java对象而以,除了查询结果值之外,其它的属性值都为null(包括主键值id),也就是说不能通过Session对象对此对象执行持久化的更新操作。如下面的代码:

  List list=session createQuery(“select newUser(user name,user age) from User user ”)

  list();

  for(int i=0;i<list length();i++){

  User user=(User)list get(i);

  user setName(“gam”);

  session saveOrUpdate(user);//这里将会实际执行一个save操作,而不会执行update操作,因为这个User对象的id属性为null,Hibernate会把它作为一个自由对象(请参考持久化对象状态部分的论述),因此会对它执行save操作。

  }

分享到:
评论

相关推荐

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

    总结来说,HQL是Hibernate中进行对象查询的关键部分,它简化了与数据库的交互,让开发者可以更加专注于业务逻辑而不是底层的数据库操作。通过学习和熟练掌握HQL,可以提高开发效率,使代码更加易于理解和维护。

    HQL多对多的查询语句分析

    总结来说,HQL在处理多对多关系查询时,利用了Hibernate的面向对象特性,使得我们可以用更加直观的方式来表达复杂的关联查询。通过学习和理解这一主题,开发者能够更高效地处理数据库中的多对多关联,提高代码的可...

    最新HQL语句实例代码

    常见HQL语句的示例包括输出结果,以及语句的分析总结

    hibernateHQL关联查询

    此外,当涉及到复杂的业务逻辑分析时,HQL关联查询同样可以发挥重要作用。 #### 六、总结 通过本文的介绍,我们不仅回顾了数据库表连接的基础知识,还深入了解了Hibernate HQL关联查询的实现原理及应用方法。对于...

    hql多表查询

    ### 实际应用案例分析 根据给定的部分内容,我们可以看到一个具体的HQL多表查询实例: ```java String hql = "select m.leaveTitle, m.leaveContent, r.xm, m.leaveDate from EipLeaveMsg m, EipRyJbxx r, SysUser...

    weblogic12 下 org.hibernate.hql.ast.HqlToken

    #### 五、总结 通过以上步骤,可以有效地解决WebLogic 12环境中因Hibernate版本不兼容而导致的`org.hibernate.hql.ast.HqlToken`类冲突问题。这种方法不仅适用于WebLogic 12,对于其他版本的WebLogic服务器同样适用...

    Hibernate_HQL大全

    #### 三、案例分析与应用技巧 假设我们需要查询所有拥有特定类型的猫(Cat)及其伴侣(mate)和幼崽(kittens)。我们可以使用以下HQL查询: ```hql SELECT cat, mate, kittens FROM Cat as cat LEFT JOIN FETCH ...

    Hibernate HQL.txt

    总结来说,Hibernate HQL提供了一种强大的工具,让开发人员能够以面向对象的方式进行数据库查询,从而提高开发效率并简化代码结构。通过本文的介绍,希望能够帮助读者更好地理解和掌握HQL的基本概念及用法。

    HQL与Criteria的对照表.pdf

    本文将基于提供的文件信息,深入探讨HQL与Criteria API在数据查询操作中的应用,并通过具体的代码示例进行对比分析。 #### 查询所有记录 **HQL:** ```java String hql = "from Employee"; List&lt;Employee&gt; result ...

    hql查询语言语法

    #### 三、HQL查询示例分析 根据给定的部分内容,我们可以看到两个具体的HQL查询示例,它们展示了如何使用HQL执行不同类型的查询。 ##### 1. 查询所有名称为“很普通事情”的事件相关联的人 ```java List p1 = sess....

    hibernate3.2 (十)HQL查询

    总结,HQL是Hibernate框架中的强大查询工具,它简化了对象与数据库之间的交互,提高了开发效率。在实际开发中,结合使用HQL和Criteria API,可以根据需求灵活选择最合适的查询方式,实现高效的数据访问。通过深入...

    Hibernate HQL教程

    ### Hibernate HQL 教程知识点总结 #### 1.1 HQL基础 ##### 1.1.1 默认数据库表和数据 - **介绍**: 本文档以`joblog`数据库为例,该数据库包含三个表:`student`(学生表)、`course`(课程表)和`sc`(选课表)。 - **...

    HibernateHQL级联注意事项[归类].pdf

    总结,掌握Hibernate HQL级联查询的关键在于理解数据库模型、Java对象和映射文件之间的关系,以及如何在HQL中正确表达这些关系,从而实现高效的数据库操作。在实际开发中,应合理利用级联查询的优势,同时注意其可能...

    hql criteria分页

    #### 四、HQL与Criteria API对比分析 尽管HQL和Criteria API都能实现分页功能,但两者之间还是存在一些区别: - **语法风格**:HQL更接近SQL,而Criteria API则采用了Java Bean的方式,更适合进行复杂查询条件的构建...

    SSh sql/hql 分页

    #### 三、SSH分页案例分析 本节将通过具体的代码示例,展示如何在SSH框架中实现分页功能。 ##### 1. `PageBean`类 ```java public class PageBean { private int count = 0; // 总记录数 private int pageSize =...

    sql解析,hql解析,hive脚本转mysql,解析hive,sparkSql,ER图自动生成、Excel自动生成.zip

    总结来说,这些工具和方法涵盖了从数据查询、转换到可视化的多个环节,对于数据处理和分析工作流至关重要。无论是SQL、HQL还是SparkSQL,理解其解析过程和相互转换的方法,能够帮助数据专业人士更高效地处理和利用...

    陌陌聊天数据实现FineBI数据分析报表

    总结来说,陌陌聊天数据的FineBI分析报表项目涉及大数据技术栈的应用,包括数据存储、处理、分析和可视化。通过Hadoop和Hive,我们可以有效地管理和处理海量聊天数据,而FineBI则为我们提供了直观且易用的工具,将...

    hibernate02:session对象、hql查询、在线查询也叫对象查询、离线查询

    总结起来,`Hibernate02`的核心是理解并熟练运用`Session`对象进行数据库操作,掌握HQL以进行面向对象的查询,以及理解在线查询和离线查询的适用场景。这些知识点对于任何涉及Java持久化的开发项目都是至关重要的。...

    数据分析系统Hive

    #### 五、Hive总结及其类似开源系统 总的来说,Hive 是一个功能强大且易于使用的数据仓库工具,它极大地简化了大数据分析的过程。然而,Hive 也有一些局限性,比如 HQL 的表达能力有限,对于某些复杂的计算需求可能...

    大数据。基于hadoop的网站日志分析系统(附带web展示页面)

    在大数据领域,日志分析是一项至...总结起来,这个项目结合了Hadoop生态系统中的多个组件,构建了一个完整的网站日志分析解决方案,实现了数据的高效存储、处理和可视化,对于大数据分析和业务决策具有很高的实用价值。

Global site tag (gtag.js) - Google Analytics