- QBC 查询就是通过使用 Hibernate 提供的 Query By Criteria API 来查询对象,这种 API 封装了 SQL 语句的动态拼装,对查询提供了更加面向对象的功能接口
- 本地SQL查询来完善HQL不能涵盖所有的查询特性
QBC检索方式
- 大致步骤如下
- 使用Session对象创建Criteria类对象
- 使用Restrictions类的静态方法添加查询条件
- 使用Criteria对象的add()方法添加查询条件
- 执行Criteria查询
@Test
public void testQBC(){
Criteria criteria = this.session.createCriteria(Employee.class);
criteria.add(Restrictions.gt("salary",108F));
List<Employee> list = criteria.list();
System.out.println(list);
}
- 添加"AND"和"OR"连接条件
@Test
public void testQBC2(){
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);
}
@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(){
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(){
Criteria criteria = this.session.createCriteria(Employee.class);
criteria.setProjection(Projections.max("salary"));
System.out.println(criteria.list());
}
分页操作
@Test
public void testQBC5(){
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);
}