Hibernate----学习(19)----HQL检索之分页查询,命名查询,投影查询,报表查询

1. 分页查询

           –setFirstResult(int firstResult): 设定从哪一个对象开始检索, 参数 firstResult 表示这个对象在查询结果中的索引位置,

                索引位置的起始值为 0. 默认情况下, Query 从查询结果中的第一个对象开始检索

           –setMaxResults(int maxResults): 设定一次最多检索出的对象的数目. 在默认情况下,

               Query Criteria 接口检索出查询结果中所有的对象

2.命名查询

          –Hibernate 允许在映射文件中定义字符串形式的查询语句.

          –<query> 元素用于定义一个 HQL 查询语句, 它和 <class> 元素并列.

 <query name="salary">
       <!--  <![CDATA[ ]]>  防止符号引发错误 -->
       <![CDATA[FROM Employee e WHERE e.salary> :min AND e.salary< :max ]]>
   </query>

       –在程序中通过 Session getNamedQuery() 方法获取查询语句对应的 Query 对象.

 @Test
public void testNamedQuery(){
    Query query = session.getNamedQuery("salary");
    List<Employee> emps = query.setFloat("min", 5000)
    			       .setFloat("max", 10000)
    			       .ist();
    System.out.println(emps.size());
}

3.投影查询。

             -查询结果仅包含实体的部分属性. 通过 SELECT 关键字实现.

             -Query list() 方法返回的集合中包含的是数组类型的元素, 每个对象数组代表查询结果的一条记录

 @Test
public void testFieldQuery(){
      String sql = "select e.email,e.salary from Employee e where e.dept = :dept";
      Query query = session.createQuery(sql);
      Department department = new Department();
      department.setId(80);
      //没有包装的时候,返回的时数组类型的元素。
      List<Object[]> result = query.setEntity("dept", department).list();

      for(Object[] obj:result){
    	  System.out.println(Arrays.asList(obj));
      }
}

              -可以在持久化类中定义一个对象的构造器来包装投影查询返回的记录,

                使程序代码能完全运用面向对象的语义来访问查询结果集.

 @Test
public void testFieldQuery(){
      String sql = "select new Employee(e.email,e.salary)"
      		+ "from Employee e where e.dept = :dept";
      Query query = session.createQuery(sql);
      Department department = new Department();
      department.setId(80);
      //包装后,返回包装类型的元素。
      List<Employee> result = query.setEntity("dept", department).list();

      for(Employee emp:result){
    	  System.out.println(emp.getEmail());
      }
}

             -可以通过 DISTINCT 关键字来保证查询结果不会返回重复元素

4.报表查询。

              •报表查询用于对数据分组和统计, SQL 一样, HQL 利用 GROUP BY 关键字对数据分组,

               用 HAVING 关键字对分组数据设定约束条件.

             •HQL 查询语句中可以调用以下聚集函数

            –count() min() max() sum() avg()

@Test
public void testGroupBy(){
	String hql = "SELECT min(e.salary), max(e.salary) "
			+ "FROM Employee e "
			+ "GROUP BY e.dept "
			+ "HAVING min(salary) > :minSal";

	Query query = session.createQuery(hql)
			.setFloat("minSal", 8000);

	List<Object []> result = query.list();
	for(Object [] objs: result){
		System.out.println(Arrays.asList(objs));
	}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值