使用ProjectionList(投影)和DetachedCriteria分页查询部分字段
在Spring中,我们dao层分页查询通常使用的是DetachedCriteria来处理
如下面的代码
List<Article> list = (List<Article>) hibernateTemplate.findByCriteria(criteria, start, Length);上面的代码,表示查询Article这个实体,从start开始查询Length大小的数据
这段代码查询的是整个Article实体。如果我们需要查询部分字段,可以使用投影来实现
首先我们创建一个DetachedCriteria对象
DetachedCriteria criteria = DetachedCriteria.forClass(Article.class);
DetachedCriteria criteria = DetachedCriteria.forClass(Article.class);再创建一个投影集合
//设置创建投影集合 ProjectionList proList = Projections.projectionList(); proList.add(Projections.groupProperty("arid")); proList.add(Projections.groupProperty("artitle")); proList.add(Projections.groupProperty("ardate")); proList.add(Projections.groupProperty("arfenlei")); proList.add(Projections.groupProperty("arcount"));
这里我们创建了一个投影集合
GroupProperty里面的参数是和您实体中的字段名一致的,如上面的代码,我们只需要查询这个实体中的五个字段
接下来我们将这个投影集合加入到DetachedCriteria中去
criteria.setProjection(proList);
然后开始分页查询
List<Object[]> list = (List<Object[]>) hibernateTemplate.findByCriteria(criteria, start, Length);需要注意的是
1、这个查询,查询出来的是一个Object数组的集合
这个Object数组如下格式{1,"标题",时间,2,10}
就是数组的顺序是根据上面代码中add的顺序排序的
而且,第一个是1,您可以强制类型转换,第三个的一个是时间,您也可以强制类型转换
如以下代码,obj数组是list的其中一个元素
Object[] obj = list.get(0); Date d = (Date) obj[2];2,后面的查询三个参数,不难理解吧
第一个是DetachedCriteria 对象,第二个是查询的开始位置,第三个是查询多少条数据
如此,我们就使用DetachedCriteria 和 ProjectionList技术实现了查询部分字段的分页功能
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情