如何对多对多关系获得的set集合中的记录进行分页
来源:互联网 发布:香港出国gpa算法 编辑:程序博客网 时间:2024/05/12 04:10
ssh框架分页(包括如何对多对多关系获得的set集合中的记录进行分页)
(1)首先写一个PageModel类,里面写了获得pageNo(当前页数),pageSize(每页显示的条数),data(每页显示的记录),recordcount(总的记录数)的get,set方法下面的方法。
(2)在泛型Dao(GenericDaoImpl)中的写如下方法getByPager,可供其他的Dao类调用,调用时T需要换成相应的对象类型。
public PageModel<T> getByPager(int pageNo,int pageSize)
throws DaoException {
PageModel<T> pm = new PageModel<T>();
//当前页码
pm.setPageNo(pageNo);
//每页显示的记录数
pm.setPageSize(pageSize);
Long count = (Long) sessionFactory.getCurrentSession().createQuery(
"selectcount(o) from " +clazz.getName() +" o")
.uniqueResult();
if (count !=null && count.longValue() > 0) {
//总记录数
pm.setRecordCount(count.longValue());
List<T> list = sessionFactory.getCurrentSession().createQuery(
"from " + clazz.getName() + " oORDER BY o DESC")
.setFirstResult((pageNo - 1) *pageSize).setMaxResults(
pageSize).list();
//获取的集合
pm.setData(list);
}
return pm;
}
(3)action通过service调用Dao层的getByPager方法,同时传入pageSize和pageNo(可以是在action里面写死定义好的)获得pagerModel对象,再用该对象调用相应的get方法,将pageNo(当前页数),pageSize(每页显示的条数),data(每页显示的记录),recordcount(总的记录数)得到,保存到session里。
(4)在相应的jsp页面加pagerlib标签
<%@ tagliburi="http://blog.csdn.net/qjyong/tags/pager"prefix="q"%>
在相应的部分写上从session里面获得的值
<c:forEachitems="${sessionScope.data}"var="wn"varStatus="vs">
对获得的每一条记录的操作
</c:forEach>
<div class="actions">
<q:pagerpageSize="${sessionScope.pageSize}"
pageNo="${sessionScope.pageNo}"
url="MyEngLearn/frame/templateFrame.action"//分页操作对应的action中的方法
recordCount="${sessionScope.recordCount}"/>
</div>
当需要分页的内容是从多对多关系的set集合里取出的数据时,需要改写getByPager方法:把set集合转换成数组,再定义一个list集合,利用for循环遍历取出数组中的每一个元素,分别存放到list集合里,再将给list集合用set方法保存在pageModel对象中,进而在action里面用get方法获取。如下:(红色注解为过程)
public PageModel<Resource> getMyResByPager(int pageNo,int pageSize,int uid) {
PageModel<Resource> pm = new PageModel<Resource>();
// 当前页码
pm.setPageNo(pageNo);
// 每页显示的记录数
pm.setPageSize(pageSize);
Query q=this.sessionFactory.getCurrentSession().createQuery("from User where UId=?");
q.setParameter(0,uid);
User u=(User)q.uniqueResult();//获得多对多关系中的一方User对象U
Hibernate.initialize(u.getResset());//解决no session或session is closed的问题
Set<Resource> myrset=u.getResset();//获得存放多对多中另一方对象(Resource)的set集合
List<Resource> myrlist=new ArrayList<Resource>();//创建一个list集合用于存放每页显示的记录
Object[] rarray=myrset.toArray();//将存放Resource对象的集合转化成数组
for(int i=(pageNo-1)*pageSize;i<pageSize*pageNo;i++)
{ if(myrset.size()>i){
Resource r=(Resource) rarray[i];//获得数组中的每一个对象
myrlist.add(r);//将这个对象加入到之前创建好的list集合中
}
else
{
break;
}
}//遍历该数组,(pageNo-1)*pageSize为每页显示的第一条记录的id,pageSize*pageNo-1为每页显示的最后一条记录的id
// 总记录条数
Long count =(long)myrset.size();
if (count !=null && count.longValue() > 0) {
// 总记录数
pm.setRecordCount(count.longValue());
// 获取的集合
pm.setData(myrlist);//把存放有每页应显示数据的list集合赋值给pagerModel对象。
}
return pm;
}
昨天发现这个方法有一个问题,就是set集合里面存放的数据是无序的,所以分页是取出的记录会乱串,在网上查到注解或者配置文件都可以用order by来让set集合里面的记录按某一列顺序排列,但是自己没有成功。还希望知道怎么做的朋友,可以告诉我应该怎么使set集合里面的记录顺序取出?
后来自己还是用了一个很笨的方法,就是没用set集合,而用了list集合,在action中向list集合里面添加Resource对象时,手动写方法对list集合里面的对象进行遍历,如果有相同的就不向list集合里面加了,这样集合里面就不会有重复的数据,而且取出时也不会乱串了。虽然得到了想要的效果,但很麻烦,其实并没有真的解决问题。
- 如何对多对多关系获得的set集合中的记录进行分页
- 对hibernate的set集合进行排序
- 对hibernate的set集合进行排序
- 对hibernate的set集合进行排序
- 对hibernate的set集合进行排序2
- 对 set集合 的遍历
- Hibernat 使用Criteria查询多对多关系(SET集合)条件
- 如何对集合中的某一字段进行排序
- jstl如何对集合的遍历(Map,Set)等
- asp如何对access数据库的数据进行分页
- 如何对phpcms v9的首页列表进行分页?
- 如何对phpcms v9的首页列表进行分页?
- 如何对包含图片的长文进行分页处理
- 如何对分库后的数据进行分页查询?
- 对数据库中的数据进行分页处理的实现
- 一个对List中的数据进行分页的工具类
- Flex 对集合的多个字段进行排序
- Flex 对集合的多个字段进行排序
- MongoCola使用教程 1 - MongoDB的基本操作和聚合功能
- Codeforces Round #244 (Div. 2)——Match & Catch
- 写给Python初学者的设计模式入门 .
- mysql学习之十:mysql编码
- 两个经典的Oracle触发器示例
- 如何对多对多关系获得的set集合中的记录进行分页
- 【Tomcat】严重: Context [/grouponAdminWeb] startup failed due to previous errors
- Xcode 5 单元测试(一)使用XCTest进行单元测试
- Java中的==和equals区别
- 让你真正明白什么是MapReduce组合式,迭代式,链式
- VMware虚拟机安装配置Android-x86详细教程
- php学习基础-文件系统(三) 文件夹的相关操作、php文件上传、php文件下载
- 处理 WinForms 事件和事件模块
- Linux基本命令