Hibernate中的QBC查询方式详解
QBC:Query By Criteria,条件查询。
是一种更加面向对象化的查询的方式。
1、QBC简单查询
测试代码:
package com.pipi.hibernate05;
import com.pipi.hibernate04.Dept;
import myutils.HibernateUtil;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import java.util.List;
// QBC简单查询:查询表中所有记录
public class Test01_QBC {
public static void main(String[] args) {
Session session = HibernateUtil.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 简单查询
Criteria criteria = session.createCriteria(Dept.class);
List<Dept> list = criteria.list();
for (Dept d : list) {
System.out.println(d);
}
transaction.commit();
}
}
(2)QBC排序查询
测试代码:
package com.pipi.hibernate05;
import com.pipi.hibernate04.Dept;
import myutils.HibernateUtil;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import java.util.List;
// QBC排序查询
public class Test02_QBC {
public static void main(String[] args) {
Session session = HibernateUtil.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 排序查询
Criteria criteria = session.createCriteria(Dept.class);
//criteria.addOrder(Order.asc("deptno")); // 升序
criteria.addOrder(Order.desc("deptno")); // 降序
List<Dept> list = criteria.list();
for (Dept d : list) {
System.out.println(d);
}
transaction.commit();
}
}
(3)QBC分页查询
测试代码:
package com.pipi.hibernate05;
import com.pipi.hibernate04.Emp;
import myutils.HibernateUtil;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import java.util.List;
// QBC的分页查询
public class Test03_QBC {
public static void main(String[] args) {
Session session = HibernateUtil.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 分页查询
Criteria criteria = session.createCriteria(Emp.class);
criteria.setFirstResult(0);
criteria.setMaxResults(5);
List<Emp> list = criteria.list();
for (Emp e : list) {
System.out.println(e);
}
transaction.commit();
}
}
(4)QBC条件查询
测试代码:
package com.pipi.hibernate05;
import com.pipi.hibernate04.Emp;
import myutils.HibernateUtil;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import java.util.List;
/*
criteria.add(Restrictions.xxx())
= eq
> gt
>= ge
< lt
<= le
<> ne
like
in
and
or
between
*/
// QBC的条件查询
public class Test04_QBC {
public static void main(String[] args) {
Session session = HibernateUtil.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 条件查询
Criteria criteria = session.createCriteria(Emp.class);
criteria.add(Restrictions.like("ename", "Smi%"));
//criteria.add(Restrictions.or(Restrictions.eq("job", "Clerk")));
criteria.add(Restrictions.eq("job", "Clerk"));
List<Emp> list = criteria.list();
for (Emp e : list) {
System.out.println(e);
}
transaction.commit();
}
}
(5)QBC统计分组查询
测试代码:
package com.pipi.hibernate05;
import com.pipi.hibernate04.Emp;
import myutils.HibernateUtil;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Projections;
// QBC的统计分组查询
public class Test05_QBC {
public static void main(String[] args) {
Session session = HibernateUtil.getCurrentSession();
Transaction transaction = session.beginTransaction();
Criteria criteria = session.createCriteria(Emp.class);
/*
add : 普通的条件,where后面的条件
addOrder : 排序
setProjection : 聚合函数 和 group by having
*/
criteria.setProjection(Projections.rowCount());
Long cnt = (Long) criteria.uniqueResult();
System.out.println(cnt); // 14
transaction.commit();
}
}
(6)QBC离线条件查询:DetachedCriteria
什么是QBC离线查询?
往往在Web层时,就可以设置QBC语句,及查询条件。
但在Web层是没有Session对象的,Session是Dao层的。
此时可以使用离线查询DetachedCriteria对象。
测试代码:
package com.pipi.hibernate05;
import com.pipi.hibernate04.Emp;
import myutils.HibernateUtil;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import java.util.List;
// QBC离线条件查询:DetachedCriteria
public class Test06_QBC {
public static void main(String[] args) {
// 在创建Session对象之前,就可以创建DetachedCriteria,并设置条件
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Emp.class);
detachedCriteria.add(Restrictions.eq("ename", "Smith"));
// 创建Session对象
Session session = HibernateUtil.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 将DetachedCriteria对象与Session绑定,返回Criteria对象
Criteria criteria = detachedCriteria.getExecutableCriteria(session);
List<Emp> list = criteria.list();
for (Emp e : list) {
System.out.println(e);
}
transaction.commit();
}
}
本文详细介绍了Hibernate中的QBC(Query By Criteria)查询方式,这是一种面向对象的查询手段。内容包括QBC的简单查询、排序查询、分页查询、条件查询、统计分组查询以及离线条件查询——DetachedCriteria的使用,强调了DetachedCriteria在Web层设置查询条件的优势。

204

被折叠的 条评论
为什么被折叠?



