Hibernate中具有三种检索方式(HQL,QBC,SQL)
Query接口
一个查询接口,用于向数据库中查询对象。并控制执行查询的过程。Query接口内封装了一个HQL查询语句。
举个栗子
//查询持久化类user Session session = sessionFactory.openSession(); //创建session实例
String hql ="from user as u where age>18"; //HQL语句,as别名可以省略不写 Query query = session.createQuery(hql);//创建query实例 List users = query.list();// 返回list集合
HQL运算符大致上与SQL的相似
= | 等于 | <> | 不等于 |
> | 大于 | < | 小于 |
>= | 大于等于 | <= | 小于等于 |
is null | 值为空 | is not unll | 值不为空 |
in | 等于列表中的某一个值 | no in | 不等于列表中的某一个值 |
between | 在两个值之间 | no between | 不在两个值之间 |
like | 字符串匹配 | and | 逻辑与 |
or | 逻辑或 | not | 逻辑非 |
查询所有
from+实体类名
Query query =session.createQuery(from User); Liset<User> list = query.list();
条件查询
from +实体类名 +where 实体类名属性名 ?
Query query =session.createQuery(from User u where u.id=? and u.name=?); query.setParameter(1,5); query.setParameter(2,"小明");//向问号里面设置值,有几个问号设置几个 List<User> list = query.list();
排序查询
from 实体类 order by 实体类属性 asc(升)或者desc(降)
分页查询
mysql实现分页 limit关键字,而在hql中语句中不能写limit所有我们得用hibernate的query对象封装的两个类实现分页
Query query = session.createQuery(User); //设置开始位置 query.setFirstResult(0); //设置结束位置 query.setMaxResults(3);
投影查询
select 实体类属性名 1 ,实体类名2 from +实体类名
聚集函数查询
聚集函数 count记录数 , sum 相加, avg 平均, max 最大 ,min 最小
select count(*) from 实体类名
更新
使用executeUodate()方法
String hql ="update User set age=23 where age = 20" Query query = session.createQuery(hql); query.executeUpdate();
删除
通过使用executeUodate()方法也可以实现删除
String hql ="delete from User where age 20" Query query = session.createQuery(hql); query.executeUpdate();
ps:HQL语句它采用的面向对象的查询方式,并提供了丰富和灵活的查询特征,hibernate中将HQL作为官方推荐的标准查询方式。
下节:另外一种数据查询接口-----Criteria接口(QBC)
时间: 2024-10-11 17:29:28