Hibernate之QBC查询与本地SQL查询

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.Final\documentation\manual\en-US\html_single\index.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查询相关内容也参看操作手册





posted @ 2015-11-11 22:34  无羁之风  阅读(295)  评论(0编辑  收藏  举报