Hibernate各种查询操作(二)

本文详细介绍QBC查询方式,包括查询所有、条件查询、排序查询、分页查询、统计查询及离线查询等操作,适用于Hibernate框架下的数据检索需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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查询条件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值