Hibernate(4)Criteria查询(单表查询)

本文详细介绍Hibernate Criteria API的各种查询方式,包括单表查询、条件查询、分页查询、查询总记录数、排序及离线查询对象。通过具体示例代码,展示如何使用Criteria进行高效的数据检索。

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

 

Criteria  单表查询比较方便

Hibernate自创的无语局面向对象查询

查询所有对象

 /**
     * 查询所有对象
     */
    @Test
    public void test(){
        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();
        Criteria criteria = session.createCriteria(Customer.class);
        List<Customer> list = criteria.list();
        System.out.println(list);
        tx.commit();


    }

条件查询

 /**
     * 条件查询
     * >    gt
     * >=   ge
     * <    lt
     * <=   le
     * ==   eq
     * !=   ne
     * in   in
     * between and    between
     * like     like
     * is not null   isNotNull
     * is null       isNull
     * or        or
     * and   and
     */
    @Test
    public void test1(){
        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();

        //创建criteria查询对象
        Criteria criteria = session.createCriteria(Customer.class);
        //添加查询参数  查询cust_id id为1的custormer对象
        criteria.add(Restrictions.eq("cust_id",1));
        //List<Customer> list = criteria.list();
        Customer c = (Customer) criteria.uniqueResult();

        System.out.println(c);
        tx.commit();


    }

分页查询


    /**
     * 分页查询
     */
    @Test
    public void test2(){
        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();

        //创建criteria查询对象
        Criteria criteria = session.createCriteria(Customer.class);
        //limit ?,?  设置分页信息
        criteria.setFirstResult(1);
        criteria.setMaxResults(4);
        //执行查询
        List<Customer> list = criteria.list();
        //Customer c = (Customer) criteria.uniqueResult();

        System.out.println(list);
        tx.commit();


    }

查询总记录数、

 

 /**
     * 查询总记录数
     */
    @Test
    public void test3(){
        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();

        //创建criteria查询对象
        Criteria criteria = session.createCriteria(Customer.class);
        //设置查询的聚合函数
        criteria.setProjection(Projections.rowCount());
        //执行查询
        Long i = (Long) criteria.uniqueResult();
        //Customer c = (Customer) criteria.uniqueResult();

        System.out.println(i);
        tx.commit();


    }

排序

    /**
     * 排序
     */
    @Test
    public void test4(){
        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();

        //创建criteria查询对象
        Criteria criteria = session.createCriteria(Customer.class);
        //criteria.addOrder(Order.asc("cust_id"));
        criteria.addOrder(Order.desc("cust_id"));   //反向排序
        List<Customer> list = criteria.list();


        System.out.println(list);
        tx.commit();


    }

离线查询对象

@Test
public void test5(){
    //模拟web层或者service层   
    DetachedCriteria dc = DetachedCriteria.forClass(Customer.class);
    dc.add(Restrictions.idEq(6l));

    //~~~~~~~~~~~~~~~~~~~~dao层   可以不变对象多个查询条件  
    Session session = HibernateUtils.getCurrentSession();
    Transaction tx = session.beginTransaction();

    Criteria c = dc.getExecutableCriteria(session);
    List list = c.list();
    System.out.println(list);
    tx.commit();


}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值