Hibernate---QBC和本地sql检索

  1. QBC 查询就是通过使用 Hibernate 提供的 Query By Criteria API 来查询对象,这种 API 封装了 SQL 语句的动态拼装,对查询提供了更加面向对象的功能接口
  2. 本地SQL查询来完善HQL不能涵盖所有的查询特性

QBC检索方式

  • 大致步骤如下
    1. 使用Session对象创建Criteria类对象
    2. 使用Restrictions类的静态方法添加查询条件
    3. 使用Criteria对象的add()方法添加查询条件
    4. 执行Criteria查询

在这里插入图片描述

    @Test
    public void testQBC(){
        /*查询Employee表*/
        Criteria criteria = this.session.createCriteria(Employee.class);
        /*查询工资大于108的雇员*/
        criteria.add(Restrictions.gt("salary",108F));
        List<Employee> list = criteria.list();
        System.out.println(list);
    }

在这里插入图片描述

  1. 添加"AND"和"OR"连接条件
    • 使用OR连接,两个条件满足一个为true
    @Test
    public void testQBC2(){
        /*查询Employee表*/
        Criteria criteria = this.session.createCriteria(Employee.class);
        Disjunction disjunction = Restrictions.disjunction();
        disjunction.add(Restrictions.gt("salary",new Float(107)));
        disjunction.add(Restrictions.like("name","9"));
        List<Employee> list  = criteria.add(disjunction).list();
        System.out.println(list);
    }

在这里插入图片描述

  • 使用AND连接,两个条件必须同时满足
@Test
public void testQBC2(){
    Criteria criteria = this.session.createCriteria(Employee.class);
    Conjunction conjunction = Restrictions.conjunction();
    conjunction.add(Restrictions.gt("salary",new Float(107)));
    conjunction.add(Restrictions.eq("id",330));
    List<Employee> list  = criteria.add(conjunction).list();
    System.out.println(list);
}

在这里插入图片描述

  • 条件中还可以添加一个实例化对象
 @Test
    public void testQBC3(){
        /*查询Employee表*/
        Criteria criteria = this.session.createCriteria(Employee.class);
        Conjunction conjunction = Restrictions.conjunction();
        Department department = new Department();
        department.setId(320);
        conjunction.add(Restrictions.eq("dept",department));
        conjunction.add(Restrictions.gt("salary",new Float(105)));
        criteria.add(conjunction);
        List<Employee> list  = criteria.list();
        System.out.println(list);
    }

在这里插入图片描述

统计查询

  • 统计查询使用"Projection"类中的静态方法完成
    @Test
    public void testQBC4(){
        /*查询Employee表*/
        Criteria criteria = this.session.createCriteria(Employee.class);
        criteria.setProjection(Projections.max("salary"));
        System.out.println(criteria.list());
    }

在这里插入图片描述

分页操作

    @Test
    public void testQBC5(){
        /*查询Employee表*/
        Criteria criteria = this.session.createCriteria(Employee.class);
        int currentPage = 5;
        int linesize = 5;

        criteria.setFirstResult((currentPage-1)*linesize);
        criteria.setMaxResults(linesize);
        System.out.println(criteria.list().size());
    }

在这里插入图片描述

使用原生的sql查询

    @Test
  public void testQBC6(){
     String sql = "INSERT INTO GG_DEPARTMENT VALUES(?,?)";
     Query query = this.session.createSQLQuery(sql);
      query.setInteger(0,9521);
     query.setString(1,"谢茂树工厂");
      System.out.println(query.executeUpdate() > 0);
  }

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43386754/article/details/87982142
今日推荐