Hibernate学习之路(十三):Hibernate中的QBC查询和本地sql操作

什么是hibernate的QBC查询
  • QBC 查询就是通过使用 Hibernate 提供的 Query By Criteria API 来查询对象,这种 API 封装了 SQL 语句的动态拼装,对查询提供了更加面向对象的功能接口
  • 示例代码:
    /*
     * 第一个QBC查询(完全是基于对象的查询操作,更加方便)
     */
    @Test
    void testQBC() {
        //1. 创建criteria对象
        Criteria criteria = this.session.createCriteria(Employee.class);

        //2. 添加查询条件:在QBC中查询条件使用criterion来表示,criterion可以通过Restrictions的静态方法获取
        criteria.add(Restrictions.eq("email", "23@qq.com"));
        criteria.add(Restrictions.gt("salary", 100F));

        //执行查询(两种方法都可以)
//      Object result = criteria.uniqueResult();
//      System.out.println(result);

        List<Employee> result = criteria.list();
        System.out.println(result.get(0));
    }

console:

mark

  • 示例代码2
    /*
     * 通过QBC实现and以及or查询
     */
    @Test
    void testQBC2() {

        Criteria criteria = this.session.createCriteria(Employee.class);

        //1. AND 查询
        Conjunction conjunction = Restrictions.conjunction();
        conjunction.add(Restrictions.like("name", "ja", MatchMode.ANYWHERE));
        Department dept = new Department();
        dept.setId(1);
        conjunction.add(Restrictions.eq("department", dept));
//      System.out.println(conjunction);


        //2. OR 查询
        Disjunction disjunction = Restrictions.disjunction();
        disjunction.add(Restrictions.ge("salary", 1000F));
        disjunction.add(Restrictions.isNull("email"));

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

console:

mark

  • 示例代码3
    /*
     * 使用QBC进行统计查询
     */
    @Test
    void testQBC3() {

        Criteria criteria = this.session.createCriteria(Employee.class);

        // 统计查询:使用Projection 来表示,可以由Projections 的静态方法获取
        criteria.setProjection(Projections.max("salary"));

        System.out.println(criteria.uniqueResult());
    }

console:

mark

  • 示例代码4
    /*
     * 使用QBC进行排序和分页查询
     */
    @Test
    void testQBC4() {

        Criteria criteria = this.session.createCriteria(Employee.class);

        //1. 添加排序
        criteria.addOrder(Order.asc("salary"));
        criteria.addOrder(Order.desc("id"));

        //2. 添加分页
        int pageNo = 1;
        int pageSize = 2;
        criteria.setFirstResult((pageNo-1) * pageSize).setMaxResults(pageSize);
        criteria.list();
    }

console:

mark

hibernate对于本地sql语句的支持
  • 示例代码:
    /*
     * hql 主要是运用在查询和更新以及删除,其不支持增加
     * QBC 主要是运用简单的查询(方便,快捷)
     * 而 本地sql 可以实现所有的功能
     */
    @Test
    void testNativeSql() {

        String sql = "insert into GG_DEPARTMENT values (?,?)";
        NativeQuery query = this.session.createSQLQuery(sql);

        query.setInteger(0, 123).setString(1, "开发部").executeUpdate();
    }

console:

mark

  • hql还可以实现很好的数据更新和删除操作
    /*
     * 测试hql的更新和删除 
     */
    @Test
    void testHQLUpdate() {

//      String hql = "update Department d set d.name = :name where d.id = :id";
//      Query query = this.session.createQuery(hql);
//      query.setParameter("name", "搞基部").setParameter("id", 123);
//      query.executeUpdate();
//      
        String hql = "delete from Department d where d.id = :id";
        this.session.createQuery(hql).setParameter("id", 123).executeUpdate();
    }

console:

mark

后台数据库:

mark

点我获取源代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值