Hibernate查询方式简介
除了可以通过Session接口提供get()和load()方法获取指定ID的实体对象外,Hibernate提供了丰富的查询方式供开发者灵活应用,常见的查询方式有HQL、Criteria Query查询和原生SQL语句查询方式。
HQL语法查询
HQL简介
Hibernate官方提供的类似于SQL语言语法的面向对象数据查询方式,HQL功能强大,目前不仅仅支持查询语句,也支持更新和删除操作。
HQL使用过程
1.获取Hibernate的Session对象
2.调用session.createQuery(String hql)方法获取Query对象
3.调用Query对象的相关方法执行hql语句
4.Hibernate对hql语句进行解析,生成对应的SQL语句
5.执行SQL语句,对执行结果进行解析并返回
@Test
public void testHQL(){
//编写hql语句
String hql = "from Employee";
//调用session.createQuery(String hql)方法获取Query对象
Query query = session.createQuery(hql);
//调用Query对象的相关方法执行hql语句
List<Employee> list = query.list();
}
Query接口
1. org.hibernate.Query
2. 通过session.createQuery(String hql)获取Query接口的实例
3. 与session.load()和session.get()相比,它提供了更为强大的查询功能如:Hibernate通用的分页实现、参数绑定、返回可滚动的结果集等
方法列表 | 方法说明 |
---|---|
List< E> list() | 执行HQL语句,以List集合形式返回执行结果 |
Object uniqueResult() | 执行HQL语句,返回单个执行结果 |
Iterator< E> iterator() | 执行HQL语句,返回结果迭代器对象 |
Query setFirstResult(int firstResult) | 设置查询结果的起始记录索引,用于分页 |
Query setMaxResults(int maxResults) | 设置查询结果的最大记录数,用于分页 |
HQL语法
1. from语句的使用
1. from为HQL关键字,HQL关键字不区分大小写
2. 注意的是Department不是表名,而是类名该HQL的作用类似于select * from dept;
/**
* from语句的使用
*/
@Test
public void testHQL(){
//编写hql语句
String hql = "from Department";
//调用session.createQuery(String hql)方法获取Query对象
Query query = session.createQuery(hql);
//调用Query对象的相关方法执行hql语句
List<Department> list = query.list();
}
2. 查询指定的属性
select dname,dname from Department
其中查询出的每一行记录都是一个数组
/**
* 查询指定属性的语句
*/
@Test
public void testQuery01(){
String hql = "select deptno,dname from Department";
Query query = session.createQuery(hql);
//注意此时返回的不是Department对象,而是Object[]数组
//在本例中每一个Object[]中有两个元素,分别是deptno以及对应的dname
List<Object[]> list = query.list();
}
也可以将指定的记录封装为对象,需要在Department类中定义对应的有参构造方法,一定注意定义完构造方法后,一定也为该类提供无参构造方法。
/**
* 查询指定属性的语句
*/
@Test
public void testQuery02(){
String hql = "select new Department( deptno,dname) from Department";
Query query = session.createQuery(hql);
List<Department> list = query.list();
}
3. 聚合函数
4. 聚合函数
5. 筛选查询结果
6. delete语句
7. update语句
HQL高级查询
1. 连接查询
1.1 隐式连接查询
1.2显式连接查询
2. HQL分页查询语句
3. 立即抓取关联对象
4. 参数绑定
5. 命名参数
6. 命名查询
QBC语句查询
QBC查询
- Query by Criteria
以更加面向对象的方式进行数据库查询操作
@Test public void testCriteria(){ Criteria c = session.createCriteria(Employee.class); List<Employee> list = c.list(); for(Employee emp : list){ System.out.println(emp); } }
QBC查询条件
1. Criteria查询的查询条件由Criterion接口的某一个实现类实现,通过Criteria对象的add(Criterion c)方法添加查询条件。
2. Restrictions类提供创建各种查询条件(Criterion)对象的方法
@Test
public void testCriterion(){
Criteria c = session.createCriteria(Employee.class);
c.add(Restrictions.between("sal",3000,5000));
c.add(Restrictions.isNotNull("comm"));
c.add(Restrictions.like("ename","张",MatchMode.ANYWHERE));
c.addOrder(Order.asc("sal"));
c.addOrder(Order.desc("hiredate"));
c.setFirstResult(0).setMaxResults(10);
List<Employee> list = c.list();
}
样例查询
1. 未完待续
2. 阿斯蒂芬
这里写代码片