小谈Hibernate中的HQL与QBC查询

最早接触Hibernate是在2004年,当时怀着忐忑和不安的心情来学习这门技术。经过这几年的使用和研 究,也积累了一定的经验,下面就HQL和QBC查询来谈一下我从工作中得到的一些总结。

本文不会讲什么是Hibernate、什么是ORM、更不会谈怎样使用HQL与QBC。本文的目的是让大家对平常 使用最多,也是最广泛的与数据库打交道的两种方式,有一个新的认识。

恩,如果你还不知道Hibernate,大象建议你先去学一下再来看本文,如果你已经是这方面的高手,大 可以关掉浏览器,千万不要因为本人的愚见,让你对大象口诛笔伐,进行人身攻击。

HQL和QBC都是查询检索的方式,最开始,我一直使用的都是HQL,因为以前一直用的都是SQL,觉得这 东西和SQL差不多,上手很快。后来又用QBC,因为QBC是基于接口和类的对象化查询,使代码变得很清晰 ,很整洁。

下面是查询用户表中,id为2,年龄等于21,并且名字以J开头的两种查询语句,它们的结果都是一样 ,只是不同的表现方式。

HQL:

Query query = session      .createQuery("from User u where u.id = 2 and u.age 

= 21 and u.name like 'J%'");  List list = query.list();  QBC:  Criteria 

criteria = session.createCriteria(User.class);  List list = criteria.add

(Expression.eq("id", 2)).add(      Expression.eq("age", 21)).add(Expression.like

("name", "J%"))      .list();  

如果查询再复杂一点,需要关联多张表,那上面这个HQL语句就会显得很复杂,比较难以阅读。对于 QBC来说,需要再加一个createCriteria(),返回一个criteria新实例,比如说,用户表与帐号表关联, 需要根据帐号表中的帐号,开户时间,金额等信息进行查询,可以写成下面的形式:

List list = criteria.add(Expression.eq("id", 2)).add(        Expression.eq

("age", 21)).add(Expression.like("name", "J%"))        .createCriteria

("account", "a").add(            Expression.eq("a.account_id", 112546)).add

(            Expression.eq("a.start_date", "2008-8-30")).add(     

       Expression.eq("a.money_sum", 1000)).list();

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索hibernate
, 查询
, hql
, hibernate 分页 sum
, add
, hql查询
, 帐号
, hql 查询
, hibernate hql
, hibernate criteria
, expression
, 查询 关键词hql
, .createCriteria
用户表
hibernate qbc查询、hibernate hql 查询、hibernate多表查询hql、hibernate关联查询hql、hibernate分页查询hql,以便于您获取更多的相关知识。

时间: 2024-12-31 17:12:15

小谈Hibernate中的HQL与QBC查询的相关文章

浅谈mysql中多表不关联查询的实现方法_Mysql

大家在使用MySQL查询时正常是直接一个表的查询,要不然也就是多表的关联查询,使用到了左联结(left join).右联结(right join).内联结(inner join).外联结(outer join).这种都是两个表之间有一定关联,也就是我们常常说的有一个外键对应关系,可以使用到 a.id = b.aId这种语句去写的关系了.这种是大家常常使用的,可是有时候我们会需要去同时查询两个或者是多个表的时候,这些表又是没有互相关联的,比如要查user表和user_history表中的某一些数据

Java Hibernate中使用HQL语句进行数据库查询的要点解析_java

一.实体对象查询 实体对象查询是hql查询的基础,作为一种对象查询语言,在查询操作时和sql不同,查询字符串中的内容要使用类名和类的属性名来代替.这种查询方法相对简单,只要有SQL功底,使用hql是很简单的,但是有一些问题需要注意,就是查询获取数据不是目的,需要考虑的是如何编写出高效的查询语句,这才是讨论的重点. 1.N+1问题 (1)什么是N+1问题在刚听到这个名词时疑惑可能是有的,以前根本就没有听过N+1问题,那么它是指什么呢?N+1指的是一张表中有N条数据,那么在获取这N条数据时会产生N+

Hibernate中@ManyToOne与@OneToMany注解查询结果用gson序列化出现循环引用问题

问题描述 首先,我确定我遇到的问题在baidu没有找到解决方案.现有2个表Customer,Account两个表,他们之间是一对多的关系,一个客户有多个账户.定义2个实体类如下:publicclassCustomerimplementsSerializable{privateStringcustId;.......privateSet<Account>accounts=newHashSet<Account>(0);@OneToMany(cascade==CascadeType.AL

onetomany-Hibernate中@ManyToOne与@OneToMany注解查询结果用gson序列化出现循环引用问题

问题描述 Hibernate中@ManyToOne与@OneToMany注解查询结果用gson序列化出现循环引用问题 首先,我确定我遇到的问题在baidu没有找到解决方案. 现有2个表Customer,Account两个表,他们之间是一对多的关系 , 一个客户有多个账户.定义2个实体类如下: public class Customer implements Serializable{ private String custId; ....... private Set<Account> acc

pkm小谈应用程序中的md5加密

     最近看到网络上黑客之类的新闻,确实觉得计算网络确实不安全,可以说没有什么是绝对安全的,只有联网就要被黑的可能,但是所有的技术都有一个相对安全的策略,今天我就来小谈一下应用程序中的密码安全.      这件事情还得从大学说起,当年参加学校数字系的软件设计大赛,当我说我的密码是经过自定义的md5加密的时候,有位评审老师就立即说md5已经被破解了,不安全,只是他只听到了"md5加密",没有听到"自定义"三个字,当时我觉得高端技术是掌握在技术牛人手里,并不是每个人

为什么Hibernate 3中的HQL无法查询汉字

为什么Hibernate 3中的HQL无法查询汉字 使用同样的代码和配置文件,在Hibernate 2上完全没有问题,在Hibernate 3中,使用如下HQL查询,无法得到正确的结果集: String hql = "from story where title like '%汉字%'"; Query q = session.createQuery(hql); 但用下面的HQL查询,却可以得到正确结果集: String hql = " from story where tit

Hibernate中hql如何使用聚合函数sum和group by组合查询!

问题描述 Hibernate中hql如何使用聚合函数sum和group by组合查询! 背景:有一张记录各个班级的成绩表: 目的:需要使用hql查询出各个班级对应的总分: 表对应的类: public class One_Class implements Serializable { private String address; private String subject; private String classes; private int score; //get和set方法省略: //

hibernate HQL new xxx() 查询 join连接多个表,并把连接后的表保存到一个新类中

hibernate HQL  new xxx() 查询 join连接多个表,并把连接后的表保存到一个新类中 另外  保存一些字段可以这样 select new com.zrj.entity.BankSelect(bankNum,bankName)from BankInfo as bank where 1=1

在Java的Hibernate框架中对数据库数据进行查询操作_java

Hibernate查询语言(HQL)是一种面向对象的查询语言,类似于SQL,但不是对表和列操作,HQL适用于持久对象和它们的属性. HQL查询由Hibernate转换成传统的SQL查询,这在圈上的数据库执行操作. 虽然可以直接使用SQL语句和Hibernate使用原生SQL,但建议使用HQL尽可能避免数据库可移植性的麻烦,并采取Hibernate的SQL生成和缓存策略的优势. 都像SELECT,FROM和WHERE等关键字不区分大小写,但如表名和列名的属性是区分在HQL敏感. FROM 语句使用