Hibernate-HQL查询

Hibernate-HQL查询

HQL是hibernate query language的缩写,这是一门面向对象的查询语言,也是hibernate中最常见的查询语言。

(一)   HQL的基本语法

 
 

select "属性名" from "对象"

where "条件"

group by "属性名" having "分组条件"

order by "属性名" desc/asc

注意事项

  • 大小写敏感
  • 尽量避免使用DML语句操作数据

例子

Select *from User u wher u.id>10 order
by u.id desc ;//心中一定要有对象的概念

(二)   实体对象与动态实例化对象查询

1)        
实体对象查询

String executeSql  = “from User”;

注意:不需要添加select关键字

2)        
动态实例化对象查询

需求:如果我们在实际的情况中,不需要查询出对象的所有字段属性,我们可以采取什么样的方法呢?

Select id , name from user ;

分析:

上述的hql语句只查询了user对象的id,name这两个字段,

但在hibernate中,次语句返回的是Object的数组,他失去了原有的对象状态,

解决方案

Select new User(id,name) from User;

条件查询和别人的使用

在HQL中通过where子句实现条件查询

From User where id = 1;

HQL提供了对象别名的方法

From User u whre u.id = 1;

From User as u wher u.id = 1;//这两种方法都可以,我个人觉得使用第一种的。

(三)   HQL语句的动态查询

1,  JDBC编程中,PreparedStatement对象为开发提供了方便,不但可以为SQL语句进行动态赋值而且避免了SQL注入式攻击。并且还使用了SQL缓存技术,提高了SQL的执行效率。

2,  HQL也采用了相似的方法。

1)        
“?”代表参数

此种方式跟PrepareStatement极为相似,通过query对象的方法setParameter()进行赋值

案例:

String hql = “from User u where u.id=?”;

Query query = session.createQuery(hql);

query. = query.setParameter(0,3);

list = query.list();

自定义参数名

此种方式也是通过Query对象的setParameter方法进行赋值,但是可以自定义HQL语句中的动态参数,他通过”:”号与定义参数组合的方法来实现的

String hql = “from User u where u.id
=:userId”;

Query query = session.createQuery();

qery = query.setParameter(“userId”,3);

list = query.list();

(四)   对象导航查询

关系模型是通过主外键来建立两张表之间的关系,而面向对象的模型则是引用

Such as

Public class Student {

Private
Teacher teacher  = null ;

}

HQL查询符合Java程序员的变成习惯,当一个对象与另外一个对象存在依赖关系时,可以通过”.”符号进行导航。

session = HibernateUtil.getSession();

transaction =
session.beginTransaction();

String hql = "from Medicine m
where m.category.name=?";

Query query =
session.createQuery(hql).setParameter(0,"感冒");

List<Medicine> list =
query.list();

for(Medicine m:list)

{

System.out.println("感冒用品"+m.getName());

}

transaction.commit();

(五)   排序查询

from User u order by id asc ;//升序

from User u order by id desc ;//降序

(六)    

(七)   聚合函数

Select count() from User u ;

from User u order by id asc ;//升序

from User u order by id desc ;//降序

Select max(u.id) from User u ;

(八)   分组操作

在HQL中使用group by’子句进行分组操作

 
 

session = HibernateUtil.getSession();

session.beginTransaction();

String hql = "select u.dept
,count(*) from User u group by u.dept";

Query query = session.createQuery(hql);

List<Object> list = query.list();

for(Object[] obj;list){

System.out.println.....

}

transaction.commit();

(九)   子查询

 
 

session = HibernateUtil.getSession();

transaction =
session.beginTransaction();

String hql = "select med.name from
Medicine med where med.price"(select max(price) from Medicine)";

List<String> list =
session.createQuery(hql).list();

for(String name:list){

System.out.println("最贵的药品为"+name);

}

transaction.commit();

时间: 2024-08-13 23:12:42

Hibernate-HQL查询的相关文章

Hibernate HQL查询:

Hibernate HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象的封装.完整的HQL语句形势如下:Select/update/delete…… from …… where …

Hibernate HQL查询语句总结

Hibernate HQL查询语句总结 1. 实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql="from User user ";List list=session.CreateQuery(hql).list();上面的代码执行结果是,查询出User实体对象所对应的所有数据,而且将数据封装成User实体对象,并且放入List中返回.这里需要注意的是,Hibernate的实体查询存在着对继承关系的判定,比如我们前面讨论映射实体继承关系中的E

转: Hibernate HQL查询 插入 更新(update)实例

1.实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql=”from User user ”;List list=session.CreateQuery(hql).list();上面的代码执行结果是,查询出User实体对象所对应的所有数据,而且将数据封装成User实体对象,并且放入List中返回.这里需要注意的是,Hibernate的实体查询存在着对继承关系的判定,比如我们前面讨论映射实体继承关系中的Employee实体对象,它有两个子类分别是 Hour

Hibernate HQL查询 插入 更新(update)实例

1.实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql=”from User user ”;List list=session.CreateQuery(hql).list();上面的代码执行结果是,查询出User实体对象所对应的所有数据,而且将数据封装成User实体对象,并且放入List中返回.这里需要注意的是,Hibernate的实体查询存在着对继承关系的判定,比如我们前面讨论映射实体继承关系中的Employee实体对象,它有两个子类分别是 Hour

第六讲(二) Hibernate HQL查询

HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖 Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象的封装.完整的HQL语句形势如下:Select/update/delete…… from …… where …… group b

Java学习笔记-Hibernate HQL查询

Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库的存取都与Session有关Session由SessionFactory创建,是线程安全的Thread-Safe,可以让多个线程同时存取SessionFactory而不会有数据共享的问题 Hibernate中Session的解释 :http://blog.csdn.net/shrek_xu/arti

Hibernate hql 查询指定字段并获取结果集(转)

在hibernate中,用hql语句查询实体类,采用list方法的返回结果为一个List,该List中封装的对象分为以下三种情况:1.查询全部字段的情况下,如"from 实体类",list中封装的对象为实体类本身,各属性都将得到填充.2.只查询一个字段,默认情况下,list中封装的是Object对象.3.查询两个或两个以上的字段,默认情况下,list中封装的是Object[],长度与所查询的字段数一致. 对于后两种情况,用标签遍历时不太方便,因为无法直接转换成实体类的对象.比较简单的解

hibernate HQL查询的参数绑定

参数绑定: Hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定: PrepareStatement pre=connection.prepare(“select * from User where user.name=?”); pre.setString(1,”zhaoxin”); ResultSet rs=pre.executeQuery(); 在Hibern

Hibernate hql查询的本地时间函数TO_DAYS()

Hibernate 的hql表示从日期类型转换成天数.例如: //此条hql语句表示购买的日期介于哪个时间段. <pre name="code" class="java"><span style="font-size:18px;">String hql = "from Assets a where TO_DAYS(a.buydate)>=TO_DAYS(?) and TO_DAYS(a.buydate)&l

Hibernate HQL查询异常:java.lang.ClassCastException解决

有时候,我们查询只需要查询bean的某一个部分,而不需要它所有的属性,这时候HQL就可以这样写: 假设有一个类User(省略getter setter): public class User { private String name; private int age; private boolean sex; } 如果只需要查询姓名和年龄,则HQL可以这样写:select new User(name,age) from User; 此时实体类中需要有一个new User(name,age) 这