Hibernate中的QBC查询方式详解

比眉伴天荒 2022-12-03 08:38 224阅读 0赞

Hibernate中的QBC查询方式详解

QBC:Query By Criteria,条件查询。

是一种更加面向对象化的查询的方式。


1、QBC简单查询

测试代码:

  1. package com.pipi.hibernate05;
  2. import com.pipi.hibernate04.Dept;
  3. import myutils.HibernateUtil;
  4. import org.hibernate.Criteria;
  5. import org.hibernate.Session;
  6. import org.hibernate.Transaction;
  7. import java.util.List;
  8. // QBC简单查询:查询表中所有记录
  9. public class Test01_QBC {
  10. public static void main(String[] args) {
  11. Session session = HibernateUtil.getCurrentSession();
  12. Transaction transaction = session.beginTransaction();
  13. // 简单查询
  14. Criteria criteria = session.createCriteria(Dept.class);
  15. List<Dept> list = criteria.list();
  16. for (Dept d : list) {
  17. System.out.println(d);
  18. }
  19. transaction.commit();
  20. }
  21. }

(2)QBC排序查询

测试代码:

  1. package com.pipi.hibernate05;
  2. import com.pipi.hibernate04.Dept;
  3. import myutils.HibernateUtil;
  4. import org.hibernate.Criteria;
  5. import org.hibernate.Session;
  6. import org.hibernate.Transaction;
  7. import org.hibernate.criterion.Order;
  8. import java.util.List;
  9. // QBC排序查询
  10. public class Test02_QBC {
  11. public static void main(String[] args) {
  12. Session session = HibernateUtil.getCurrentSession();
  13. Transaction transaction = session.beginTransaction();
  14. // 排序查询
  15. Criteria criteria = session.createCriteria(Dept.class);
  16. //criteria.addOrder(Order.asc("deptno")); // 升序
  17. criteria.addOrder(Order.desc("deptno")); // 降序
  18. List<Dept> list = criteria.list();
  19. for (Dept d : list) {
  20. System.out.println(d);
  21. }
  22. transaction.commit();
  23. }
  24. }

(3)QBC分页查询

测试代码:

  1. package com.pipi.hibernate05;
  2. import com.pipi.hibernate04.Emp;
  3. import myutils.HibernateUtil;
  4. import org.hibernate.Criteria;
  5. import org.hibernate.Session;
  6. import org.hibernate.Transaction;
  7. import java.util.List;
  8. // QBC的分页查询
  9. public class Test03_QBC {
  10. public static void main(String[] args) {
  11. Session session = HibernateUtil.getCurrentSession();
  12. Transaction transaction = session.beginTransaction();
  13. // 分页查询
  14. Criteria criteria = session.createCriteria(Emp.class);
  15. criteria.setFirstResult(0);
  16. criteria.setMaxResults(5);
  17. List<Emp> list = criteria.list();
  18. for (Emp e : list) {
  19. System.out.println(e);
  20. }
  21. transaction.commit();
  22. }
  23. }

(4)QBC条件查询

测试代码:

  1. package com.pipi.hibernate05;
  2. import com.pipi.hibernate04.Emp;
  3. import myutils.HibernateUtil;
  4. import org.hibernate.Criteria;
  5. import org.hibernate.Session;
  6. import org.hibernate.Transaction;
  7. import org.hibernate.criterion.Restrictions;
  8. import java.util.List;
  9. /* criteria.add(Restrictions.xxx()) = eq > gt >= ge < lt <= le <> ne like in and or between */
  10. // QBC的条件查询
  11. public class Test04_QBC {
  12. public static void main(String[] args) {
  13. Session session = HibernateUtil.getCurrentSession();
  14. Transaction transaction = session.beginTransaction();
  15. // 条件查询
  16. Criteria criteria = session.createCriteria(Emp.class);
  17. criteria.add(Restrictions.like("ename", "Smi%"));
  18. //criteria.add(Restrictions.or(Restrictions.eq("job", "Clerk")));
  19. criteria.add(Restrictions.eq("job", "Clerk"));
  20. List<Emp> list = criteria.list();
  21. for (Emp e : list) {
  22. System.out.println(e);
  23. }
  24. transaction.commit();
  25. }
  26. }

(5)QBC统计分组查询

测试代码:

  1. package com.pipi.hibernate05;
  2. import com.pipi.hibernate04.Emp;
  3. import myutils.HibernateUtil;
  4. import org.hibernate.Criteria;
  5. import org.hibernate.Session;
  6. import org.hibernate.Transaction;
  7. import org.hibernate.criterion.Projections;
  8. // QBC的统计分组查询
  9. public class Test05_QBC {
  10. public static void main(String[] args) {
  11. Session session = HibernateUtil.getCurrentSession();
  12. Transaction transaction = session.beginTransaction();
  13. Criteria criteria = session.createCriteria(Emp.class);
  14. /* add : 普通的条件,where后面的条件 addOrder : 排序 setProjection : 聚合函数 和 group by having */
  15. criteria.setProjection(Projections.rowCount());
  16. Long cnt = (Long) criteria.uniqueResult();
  17. System.out.println(cnt); // 14
  18. transaction.commit();
  19. }
  20. }

(6)QBC离线条件查询:DetachedCriteria

什么是QBC离线查询?

往往在Web层时,就可以设置QBC语句,及查询条件。
但在Web层是没有Session对象的,Session是Dao层的。
此时可以使用离线查询DetachedCriteria对象。

测试代码:

  1. package com.pipi.hibernate05;
  2. import com.pipi.hibernate04.Emp;
  3. import myutils.HibernateUtil;
  4. import org.hibernate.Criteria;
  5. import org.hibernate.Session;
  6. import org.hibernate.Transaction;
  7. import org.hibernate.criterion.DetachedCriteria;
  8. import org.hibernate.criterion.Restrictions;
  9. import java.util.List;
  10. // QBC离线条件查询:DetachedCriteria
  11. public class Test06_QBC {
  12. public static void main(String[] args) {
  13. // 在创建Session对象之前,就可以创建DetachedCriteria,并设置条件
  14. DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Emp.class);
  15. detachedCriteria.add(Restrictions.eq("ename", "Smith"));
  16. // 创建Session对象
  17. Session session = HibernateUtil.getCurrentSession();
  18. Transaction transaction = session.beginTransaction();
  19. // 将DetachedCriteria对象与Session绑定,返回Criteria对象
  20. Criteria criteria = detachedCriteria.getExecutableCriteria(session);
  21. List<Emp> list = criteria.list();
  22. for (Emp e : list) {
  23. System.out.println(e);
  24. }
  25. transaction.commit();
  26. }
  27. }

发表评论

表情:
评论列表 (有 0 条评论,224人围观)

还没有评论,来说两句吧...

相关阅读

    相关 hibernateQBC查询

    最近不得不写一下,就因为一个简单的查询的功能,让没用过hibernate的QBC查询的我卡了三天,原因是没有用过,我在网上查了好多资料, 关于QBC查询的介绍、问题、少的可怜,