Hibernate学习笔记5:QBC条件查询例子

什么是QBc:

QBC(Query By Criteria)按条件查询,通过Criteria构造查询条件,即通过调用Criteria的api实现各种查询。

通过Criteria对象拼装 查询条件,调用Criteria的add方法拼接查询条件,最终hibernate通过criteria对象自动生成sql语句。

QBC检索步骤:

1.调用Session的createCriteria()方法创建一个Criteria对象。

2.设定查询条件。Restrictions类提供了一系列用于设定查询条件的静态方法,
这些静态方法都返回Criterion实例,每个Criterion实例代表一个查询条件。
Criteria的add()方法用于加入查询条件。

3.调用Criteria的list()方法执行查询语句。该方法返回List类型的查询结果,在
List集合中存放了符合查询条件的持久化对象


入门程序:

    //查询实体对象
    @Test
    public void test1() {

        //创建session
        Session session = HibernateUtil.openSession();

        //创建criteria对象
        //指定实体类型,即pojo类,这里pojo是hibernate.cfg.xml加载映射文件对应的类
        Criteria criteria = session.createCriteria(CstCustomer.class);

        //通过criteria对象查询拼接条件
        //参数:第一个参数:实体类型中的属性
        //criteria.add(Restrictions.eq("custName", "兔斯基"));
        criteria.add(Restrictions.like("custName", "%兔%"));

        //查询所有的数据,由于上边创建criteria时指定实体CstCustomer,去查询CstCustomer对应的表cst_customer
        List list = criteria.list();
        //System.out.println(list);

    }

数据库表cst_customer如下:
这里写图片描述

测试后在console里查看打印出来的日志:
这里写图片描述

执行查询后list里的内容:
这里写图片描述


分页查询

//分页查询数据列表
    @Test
    public void test2() {

        //创建session
        Session session = HibernateUtil.openSession();

        //创建criteria对象
        //指定实体类型,即pojo类,这里pojo是hibernate.cfg.xml加载映射文件对应的类
        Criteria criteria = session.createCriteria(CstCustomer.class);

        //当前页码
        int page = 1;
        //每页显示记录数
        int maxResults = 2;

        //求出起始记录的下标
        int firstResult = (page-1)*maxResults;

        //设置起始记录的下标
        criteria.setFirstResult(firstResult);

        //设置每页查询的记录数
        criteria.setMaxResults(maxResults);

        List list = criteria.list();
        System.out.println(list);
    }

这里写图片描述

记录总数查询

public void test4(){

            //创建session
            Session session = HibernateUtil.openSession();

            //创建criteria对象
            //指定实体类型,即pojo的类型,这里pojo是hibernate.cfg.xml加载映射文件对应的类型
            Criteria criteria = session.createCriteria(CstCustomer.class);
            criteria.add(Restrictions.like("custName", "%兔%"));
            //基于投影查询,设置rowCount,自动生成select count(*)
            criteria.setProjection(Projections.rowCount());

            Long total  = (Long) criteria.uniqueResult();

            System.out.println(total);


        }

投影查询

public void test3(){

            //创建session
            Session session = HibernateUtil.openSession();

            //创建criteria对象
            //指定实体类型,即pojo的类型,这里pojo是hibernate.cfg.xml加载映射文件对应的类型
            Criteria criteria = session.createCriteria(CstCustomer.class);

            //设置投影列
            //property中指定实体中的属性名
            //criteria.setProjection(Projections.property("custName"));

            //通过Projections.projectionList().add添加多个投影列
            criteria.setProjection(
                        Projections.projectionList()
                            .add(Projections.property("custId").as("custId"))
                            .add(Projections.property("custName").as("custName"))
                            );

            //将投影查询结果object[]数组转成pojo对象
            //结果集封装策略
            criteria.setResultTransformer(new AliasToBeanResultTransformer(CstCustomer.class));



            List list = criteria.list();
            System.out.println(list);
        }

QBC自定义条件:

(截图来自传智课件):

这里写图片描述
这里写图片描述
这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值