• Hibernate各种查询操作(二)


    一、QBC的查询方式

      使用QBC不在需要写hql语句,而是使用criteria对象的各种方法来实现。

    1、查询所有

        //使用QBC方式查询所有
        @Test
        public void test11(){
            SessionFactory sessionFactory = null;
            Session session =null;
            Transaction tx = null;
            try {
                sessionFactory = HibernateUtils.getFactory();
                session = sessionFactory.openSession();
                tx = session.beginTransaction();
                //1、创建criteria对象,指定要查询的实体类的名称
                Criteria criteria = session.createCriteria(Good.class);
                //2、调用方法得到数据
                List<Good> list = criteria.list();
                for (Good good : list) {
                    System.out.println(good);
                }
                tx.commit();
            } catch (Exception e) {
                tx.rollback();
            }finally{
                session.close();
                sessionFactory.close();
            }
        }

    2、条件查询

      (1)准确查询

    // 使用QBC方式查询名称为苹果,并且描述为苹果的记录
        @Test
        public void test12() {
            SessionFactory sessionFactory = null;
            Session session = null;
            Transaction tx = null;
            try {
                sessionFactory = HibernateUtils.getFactory();
                session = sessionFactory.openSession();
                tx = session.beginTransaction();
                // 1、创建criteria对象,指定要查询的实体类的名称
                Criteria criteria = session.createCriteria(Good.class);
                /**
                 * 使用方法设置查询条件
                 * 使用criteria的add方法添加条件
                 * 使用Restrictios的静态方法设置条件
                 */
                criteria.add(Restrictions.eq("gname", "苹果"));
                criteria.add(Restrictions.eq("gmono", "苹果"));
                // 2、调用方法得到数据
                List<Good> list = criteria.list();
                for (Good good : list) {
                    System.out.println(good);
                }
                tx.commit();
            } catch (Exception e) {
                tx.rollback();
            } finally {
                session.close();
                sessionFactory.close();
            }
        }

      (2)模糊查询

    // 使用QBC方式查询名称中有苹字的记录
        @Test
        public void test13() {
            SessionFactory sessionFactory = null;
            Session session = null;
            Transaction tx = null;
            try {
                sessionFactory = HibernateUtils.getFactory();
                session = sessionFactory.openSession();
                tx = session.beginTransaction();
                // 1、创建criteria对象,指定要查询的实体类的名称
                Criteria criteria = session.createCriteria(Good.class);
                /**
                 * 使用方法设置查询条件 使用criteria的add方法添加条件 使用Restrictios的静态方法设置条件
                 */
                criteria.add(Restrictions.like("gname", "%苹%"));
                // 2、调用方法得到数据
                List<Good> list = criteria.list();
                for (Good good : list) {
                    System.out.println(good);
                }
                tx.commit();
            } catch (Exception e) {
                tx.rollback();
            } finally {
                session.close();
                sessionFactory.close();
            }
        }

    3、排序查询

      (1)正序查询

    // 使用QBC方式查询以id的升序来查询 数据
        @Test
        public void test14() {
            SessionFactory sessionFactory = null;
            Session session = null;
            Transaction tx = null;
            try {
                sessionFactory = HibernateUtils.getFactory();
                session = sessionFactory.openSession();
                tx = session.beginTransaction();
                // 1、创建criteria对象,指定要查询的实体类的名称
                Criteria criteria = session.createCriteria(Good.class);
                /**
                 * 使用方法设置查询条件 
                 * 使用criteria的addOrder方法添加排序
                 *  使用Order的静态方法设置排属性
                 */
                criteria.addOrder(Order.asc("gid"));
                // 2、调用方法得到数据
                List<Good> list = criteria.list();
                for (Good good : list) {
                    System.out.println(good);
                }
                tx.commit();
            } catch (Exception e) {
                tx.rollback();
            } finally {
                session.close();
                sessionFactory.close();
            }
        }

      (2)将序查询:

      

    // 使用QBC方式查询以id的将序来查询 数据
        @Test
        public void test15() {
            SessionFactory sessionFactory = null;
            Session session = null;
            Transaction tx = null;
            try {
                sessionFactory = HibernateUtils.getFactory();
                session = sessionFactory.openSession();
                tx = session.beginTransaction();
                // 1、创建criteria对象,指定要查询的实体类的名称
                Criteria criteria = session.createCriteria(Good.class);
                /**
                 * 使用方法设置查询条件 
                 * 使用criteria的addOrder方法添加排序 
                 * 使用Order的静态方法设置排属性
                 */
                criteria.addOrder(Order.desc("gid"));
                // 2、调用方法得到数据
                List<Good> list = criteria.list();
                for (Good good : list) {
                    System.out.println(good);
                }
                tx.commit();
            } catch (Exception e) {
                tx.rollback();
            } finally {
                session.close();
                sessionFactory.close();
            }
        }

    4、分页查询

    // 使用QBC方式每次查询5条数据
        @Test
        public void test16() {
            SessionFactory sessionFactory = null;
            Session session = null;
            Transaction tx = null;
            try {
                sessionFactory = HibernateUtils.getFactory();
                session = sessionFactory.openSession();
                tx = session.beginTransaction();
                // 1、创建criteria对象,指定要查询的实体类的名称
                Criteria criteria = session.createCriteria(Good.class);
                //设置第一个要查询记录的位置
                criteria.setFirstResult(0);
                //2、设置每页最大的记录是
                criteria.setMaxResults(5);
                // 2、调用方法得到数据
                List<Good> list = criteria.list();
                for (Good good : list) {
                    System.out.println(good);
                }
                tx.commit();
            } catch (Exception e) {
                tx.rollback();
            } finally {
                session.close();
                sessionFactory.close();
            }
        }

    5、统计查询

    // 使用QBC方式查询记录数
        @Test
        public void test17() {
            SessionFactory sessionFactory = null;
            Session session = null;
            Transaction tx = null;
            try {
                sessionFactory = HibernateUtils.getFactory();
                session = sessionFactory.openSession();
                tx = session.beginTransaction();
                // 1、创建criteria对象,指定要查询的实体类的名称
                Criteria criteria = session.createCriteria(Good.class);
                criteria.setProjection(Projections.rowCount());
                // 2、调用方法得到数据
                Object object = criteria.uniqueResult();
                Long long1 = (Long) object;
                int count = long1.intValue();
                System.out.println(count);
                tx.commit();
            } catch (Exception e) {
                tx.rollback();
            } finally {
                session.close();
                sessionFactory.close();
            }
        }

    6、离线查询

    // 使用QBC方式离线查询
        @Test
        public void test18() {
            SessionFactory sessionFactory = null;
            Session session = null;
            Transaction tx = null;
            try {
                sessionFactory = HibernateUtils.getFactory();
                session = sessionFactory.openSession();
                tx = session.beginTransaction();
                // 1、创建DetachedCriteria对象,指定要查询的实体类的名称
                DetachedCriteria cDetachedCriteria = DetachedCriteria.forClass(Good.class);
                //2、得到criteria对象(最终执行时才用到session)
                Criteria criteria = cDetachedCriteria.getExecutableCriteria(session);
                criteria.setProjection(Projections.rowCount());
                // 3、调用方法得到数据
                Object object = criteria.uniqueResult();
                Long long1 = (Long) object;
                int count = long1.intValue();
                System.out.println(count);
                tx.commit();
            } catch (Exception e) {
                tx.rollback();
            } finally {
                session.close();
                sessionFactory.close();
            }
        }

     7、QBC查询条件

  • 相关阅读:
    学习《Building Applications with FME Objects》 之十 使用集合
    oracle左右连接的另外表示方法
    拥抱SQLAlchemy 之二 拉拉手,我请你去看电影~
    Oracle中的Union、Union All、Intersect、Minus
    System.Data.SQLite测试
    SmartSVN + google code
    学习《Building Applications with FME Objects》 之九 高级要素处理
    Django静态文件配置备忘录
    测试oracle with as
    测量坐标系中单个多边形面积解析法计算的程序源代码
  • 原文地址:https://www.cnblogs.com/jack1995/p/6952886.html
Copyright © 2020-2023  润新知