10-hibernate之QBC检索&本地SQL

一、QBC概述

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

二、QBC的几种方式

1、普通查询

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

      //2.添加查询条件:在QBC中查询条件使用Criterion来表示。Criterion可以通
      // 过Restrictions的静态方法得到
     criteria.add(Restrictions.eq("email","[email protected]"));
     criteria.add(Restrictions.eq("salary",1250F));

      //3.执行查询
      Employee employee = (Employee) criteria.uniqueResult();
      System.out.println(employee);
  }

2、AND/OR

  • AND使用Conjunction表示
  • OR使用Disjunction表示
 @Test
 public void testQBC2(){
     Criteria criteria = session.createCriteria(Employee.class);
     //1.AND 使用Conjunction表示,Conjunction本身就是一个Criteria对象,且其中
     // 还可以添加Criteria对象
     Conjunction conjunction = Restrictions.conjunction(); 
     conjunction.add(Restrictions.like("email","qq", MatchMode.ANYWHERE));
     Department dept = new Department();
     dept.setId(2);
     conjunction.add(Restrictions.eq("dept",dept));
     System.out.println(conjunction);
     
     //2.OR 使用Disjunction表示
     Disjunction disjunction = Restrictions.disjunction();
     disjunction.add(Restrictions.ge("salary",1000F));
     disjunction.add(Restrictions.isNull("email"));
     
     criteria.add(disjunction);
     criteria.add(conjunction);

     criteria.list();

 }

3、统计查询

  • 统计查询:使用Projections的静态方法得到
 @Test
 public void testQBC3(){
     Criteria criteria = session.createCriteria(Employee.class);
     //统计查询:使用Projections的静态方法得到
    criteria.setProjection(Projections.max("salary"));
    System.out.println(criteria.uniqueResult());
 }

4、排序和翻页

@Test
 public void testQBC4(){
      Criteria criteria = session.createCriteria(Employee.class);
      //1.添加排序:
      criteria.addOrder(Order.asc("salary")).addOrder(Order.desc("email"));

      //添加翻页方法
      int pageSize = 4;
      int pageNo = 1;
      criteria.setFirstResult((pageNo - 1) * pageSize).setMaxResults(pageSize).list();
 }

三、本地SQL概述

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

四、本地SQL使用案例

//本地SQL插入操作
@Test
public void testNativeSQL(){
    String sql = "INSERT INTO department values(?,?)";
    SQLQuery query = session.createSQLQuery(sql);
    query.setInteger(0,10).setString(1,"策划部").executeUpdate();
}

与HQL对比:

删除指定ID的Department对象

@Test
public void testHQLUpdate(){
   String hql = "delete from Department d where d.id=?";
  session.createQuery(hql).setInteger(0,10).executeUpdate();
}

你可能感兴趣的:(javaEE)