Hibernate中的QBC查询方式详解
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();
}
}
还没有评论,来说两句吧...