Hibernate学习之QBC和本地SQL查询

本文介绍了Hibernate中QBC查询的使用方法,包括条件组合、统计查询、排序及分页等高级功能,并演示了如何结合本地SQL查询以实现更复杂的查询需求。

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

hibernate 学习之QBC和本地SQL查询

QBC查询是通过使用hibernate提供的QUeryByCriteria API 来查询对象,
这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口。

本地SQL查询来完善HQL不能覆盖所有的查询特性

马哥私房菜博客地址:https://github.com/mageSFC/myblog




    @Test
    public void testQBC() {
        //1.创建一个criteria 对象
        Criteria criteria = session.createCriteria(Employee.class);
        //2. 添加查询条件,在qbc中查询条件使用criterion来表示
        //criterion可以通过Restrictions类的静态方法得到
        criteria.add(Restrictions.eq("email", "SKUMAR"));
        criteria.add(Restrictions.gt("salary", 5000f));

        Employee employee = (Employee) criteria.uniqueResult();

        System.out.println(employee);


    }


    @Test
    public void testQBC2() {
        //1.创建一个criteria 对象
        Criteria criteria = session.createCriteria(Employee.class);

        //and  的使用  Conjunction 本身就是一个criterion对象,其中还可以添加criterion对象
        Conjunction conjunction = Restrictions.conjunction();
        conjunction.add(Restrictions.like("name", "a", MatchMode.ANYWHERE));

        Department dept = new Department();
        dept.setId(20);
        conjunction.add(Restrictions.eq("dept", dept));
        System.out.println(conjunction);


        Disjunction disjunction = Restrictions.disjunction();
        disjunction.add(Restrictions.ge("salary", 6000f));
        disjunction.add(Restrictions.isNull("email"));

        criteria.add(disjunction).add(conjunction);

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


    }

    @Test
    public void testQBC3() {
        //1.创建一个criteria 对象
        Criteria criteria = session.createCriteria(Employee.class);

        //统计查询
        criteria.setProjection(Projections.max("salary"));

        Float o = (Float) criteria.uniqueResult();
        System.out.println(o);


    }


    @Test
    public void testQBC4() {
        //1.创建一个criteria 对象
        Criteria criteria = session.createCriteria(Employee.class);

        //排序
        criteria.addOrder(Order.asc("salary"));
        criteria.addOrder(Order.desc("email"));

        int pageSize = 5;
        int pageNo = 3;

        criteria.setFirstResult((pageNo - 1) * pageSize)
                .setMaxResults(pageSize);
        List list = criteria.list();
        System.out.println(list);

    }


    @Test
    public void testNativeSql() {
        String sql = "INSERT INTO HB_DEPARTMENT VALUES(?, ?)";
        Query sqlQuery = session.createSQLQuery(sql);

        sqlQuery.setInteger(0, 280).setString(1, "马哥私房菜").executeUpdate();

    }

    @Test
    public void testHQLUpdate(){
        String sql = "delete from Department  d where d.id = :id";
        Query query = session.createQuery(sql);
        query.setInteger("id", 280).executeUpdate();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值