1. QBC查询:
QBC 查询就是通过使用Hibernate提供的QueryByCriteria API 来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口
QBC查询示例(接HQL查询,使用上一篇相同的环境):
@Test public void testQBC(){ //1. 创建一个Criteria 对象 Criteria criteria=session.createCriteria(Employee.class); //2. 添加查询条件 :在QBC中,查询条件使用Criterion来表示 // Criterion 可以通过Restrictions的静态方法得到 criteria.add(Restrictions.eq("email", "name4@qq.com")); criteria.add(Restrictions.between("salary", 3000F, 10000F)); //3. 执行查询 Employee emp=(Employee) criteria.uniqueResult(); System.out.println(emp.getName()); System.out.println(emp.getDept().getName()); }
@Test public void testQBC3(){ 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(); } @Test public void testQBC2(){ Criteria criteria=session.createCriteria(Employee.class); // 统计查询 使用Projection表示,可以由Projections的静态方法得到 criteria.setProjection(Projections.max("salary")); System.out.println(criteria.uniqueResult()); } @Test public void testQBC1(){ Criteria criteria=session.createCriteria(Employee.class); //1 AND:使用Conjunction表示 // Conjunction 本身就是一个 Criterion对象 // 且其中还可以添加Criterion对象 Conjunction conjunction=Restrictions.conjunction(); conjunction.add(Restrictions.isNotNull("email")); conjunction.add(Restrictions.eq("salary", 6000F)); //2 OR: 使用Disjunction表示 Disjunction disjunction=Restrictions.disjunction(); disjunction.add(Restrictions.eq("name", "name6")); disjunction.add(Restrictions.like("email", "name")); criteria.add(disjunction); criteria.add(conjunction); Employee emp=(Employee) criteria.uniqueResult(); System.out.println(emp.getName()); System.out.println(emp.getDept().getName()); }其它关于QBC查询用法,参考Hibernate的操作手册:hibernate-release-4.2.5.Finaldocumentationmanualen-UShtml_singleindex.html
2. 本地SQL查询:
本地SQL查询来完善HQL不能涵盖所有的查询特性
@Test public void testNativeSQL(){ String sql="insert into department values(?,?)"; Query query=session.createSQLQuery(sql); query.setInteger(0, 9) .setString(1, "umendme") .executeUpdate(); }同样本地sql查询相关内容也参看操作手册