分页问题

云晴 2016-12-29 10:43:50
我按照工号查询出19页的记录,每页10条,
但是当我点击上一页或者下一页,就会显示全查询的记录。


//Page.java
public class Page<User> {

// 结果集
private List<User> list;

// 查询记录总数
private int totalRecords;

// 每页多少条记录
private int pageSize;

// 第几页
private int pageNo;

/**
* @return 总页数
* */
public int getTotalPages(){
return (totalRecords+pageSize-1)/pageSize;

// return totalRecords % pageSize==0 ? totalRecords/pageSize:totalRecords/pageSize+1;
}


/**
* 计算当前页开始记录
* @param pageSize 每页记录数
* @param currentPage 当前第几页
* @return 当前页开始记录号
*/
public int countOffset(int currentPage,int pageSize){
int offset = pageSize*(currentPage-1);
return offset;
}

/**
* @return 首页
* */
public int getTopPageNo(){
return 1;
}

/**
* @return 上一页
* */
public int getPreviousPageNo(){
if(pageNo<=1){
return 1;
}
return pageNo-1;
}

/**
* @return 下一页
* */
public int getNextPageNo(){
if(pageNo>=getBottomPageNo()){
return getBottomPageNo();
}
return pageNo+1;
}

/**
* @return 尾页
* */
public int getBottomPageNo(){
return getTotalPages();
}


public List<User> getList() {
return list;
}

public void setList(List<User> list) {
this.list = list;
}

public int getTotalRecords() {
return totalRecords;
}

public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
}

public int getPageSize() {
return pageSize;
}

public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}

public int getPageNo() {
return pageNo;
}

public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}

}
//dao层
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private SessionFactory sessionFactory;

/**
* 查询dao层接口实现类
* 进行动态拼接查询,拼接hql语句进行多条件查询
*/
public List<User> getForPage(String EnID, String dateafter, String datebefore,int offset, int length) {
String hql = "from User where 1=1";
if(EnID!=null&&EnID!=""){
hql+=" and EnID='"+EnID+"'";
}
if(dateafter!=null&&dateafter!=""){
hql+=" and datetime>='"+dateafter+"'";
}
if(datebefore!=null&&datebefore!=""){
hql+=" and datetime<='"+datebefore+"'";
}
if(EnID!=null&&EnID!=""&&dateafter!=null&&dateafter!=""){
hql+=" and EnID='"+EnID+"'"+" and datetime>='"+dateafter+"'";
}
if(EnID!=null&&EnID!=""&&datebefore!=null&&datebefore!=""){
hql+=" and EnID='"+EnID+"'"+" and datetime<='"+datebefore+"'";
}
if(dateafter!=null&&dateafter!=""&&datebefore!=null&&datebefore!=""){
hql+=" and datetime between '"+dateafter+"'"+" and '"+datebefore+"'";
}
if(EnID!=null&&EnID!=""&&dateafter!=null&&dateafter!=""&&datebefore!=null&&datebefore!=""){
hql+=" and EnID='"+EnID+"'"+" and datetime between '"+dateafter+"'"+" and '"+datebefore+"'";
}
if((EnID==null||EnID=="")&&(dateafter==null||dateafter=="")&&(datebefore==null||datebefore=="")){
hql=hql;
}
Query query = sessionFactory.getCurrentSession().createQuery(hql);
query.setFirstResult(offset);
query.setMaxResults(length);
List<User> list=query.list();
return list;
}
public Long getAllRowCount(String EnID, String dateafter, String datebefore) {
String hql = "SELECT COUNT(*) from User where 1=1";
if(EnID!=null&&EnID!=""){
hql+=" and EnID='"+EnID+"'";
}
if(dateafter!=null&&dateafter!=""){
hql+=" and datetime>='"+dateafter+"'";
}
if(datebefore!=null&&datebefore!=""){
hql+=" and datetime<='"+datebefore+"'";
}
if(EnID!=null&&EnID!=""&&dateafter!=null&&dateafter!=""){
hql+=" and EnID='"+EnID+"'"+" and datetime>='"+dateafter+"'";
}
if(EnID!=null&&EnID!=""&&datebefore!=null&&datebefore!=""){
hql+=" and EnID='"+EnID+"'"+" and datetime<='"+datebefore+"'";
}
if(dateafter!=null&&dateafter!=""&&datebefore!=null&&datebefore!=""){
hql+=" and datetime between '"+dateafter+"'"+" and '"+datebefore+"'";
}
if(EnID!=null&&EnID!=""&&dateafter!=null&&dateafter!=""&&datebefore!=null&&datebefore!=""){
hql+=" and EnID='"+EnID+"'"+" and datetime between '"+dateafter+"'"+" and '"+datebefore+"'";
}
if((EnID==null||EnID=="")&&(dateafter==null||dateafter=="")&&(datebefore==null||datebefore=="")){
hql=hql;
}
Query query = sessionFactory.getCurrentSession().createQuery(hql);
return Long.parseLong(query.uniqueResult().toString());
}

}
//service层
@Autowired
private UserDao userDao;

/**
* 查询Service层接口实现类
*/
public Page getForPage(String EnID,String dateafter, String datebefore,int currentPage, int pageSize){
Page page=new Page<User>();

int allRow = userDao.getAllRowCount(EnID, dateafter, datebefore).intValue();
int offset = page.countOffset(currentPage, pageSize);
List<User> list= userDao.getForPage(EnID, dateafter, datebefore, offset, pageSize);
page.setPageNo(currentPage);
page.setPageSize(pageSize);
page.setTotalRecords(allRow);
page.setList(list);
return page;
}
public Long getAllRowCount(String EnID, String dateafter, String datebefore) {
return userDao.getAllRowCount(EnID, dateafter, datebefore);
}
//controller层
@RequestMapping(value="/user/getuser.do",method=RequestMethod.GET)
public String getAllUsers(HttpServletRequest request,String EnID,String dateafter, String datebefore){
try {
String pageNo = request.getParameter("pageNo");
if (pageNo == null) {
pageNo = "1";
}
Page page = userService.getForPage(EnID, dateafter, datebefore, Integer.valueOf(pageNo), 10);
request.setAttribute("page", page);
List<User> pageusers = page.getList();
request.setAttribute("pageusers", pageusers);
} catch (Exception e) {
e.printStackTrace();
}
return "list";
}
//list.jsp
<body>

<table border="1" style="width: 50%">
<tr>
<th>ID</th>
<th>工号</th>
<th>名字</th>
<th>签到时间</th>
</tr>
<c:forEach var="item" items="${pageusers}">
<tr>
<td>${item.id}</td>
<td>${item.enID}</td>
<td>${item.name}</td>
<td>${item.datetime}</td>
</tr>
</c:forEach>
<tr>
<td colspan="6" align="center">共${page.totalRecords}条记录 共${page.totalPages}页 当前第${page.pageNo}页<br>

<a href="/SpringMVC04/user/getuser.do?pageNo=${page.topPageNo }"><input type="button" name="fristPage" value="首页" /></a>
<c:choose>
<c:when test="${page.pageNo!=1}">

<a href="/SpringMVC04/user/getuser.do?pageNo=${page.previousPageNo }"><input type="button" name="previousPage" value="上一页" /></a>

</c:when>
<c:otherwise>

<input type="button" disabled="disabled" name="previousPage" value="上一页" />

</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${page.pageNo != page.totalPages}">
<a href="/SpringMVC04/user/getuser.do?pageNo=${page.nextPageNo }"><input type="button" name="nextPage" value="下一页" /></a>
</c:when>
<c:otherwise>

<input type="button" disabled="disabled" name="nextPage" value="下一页" />

</c:otherwise>
</c:choose>
<a href="/SpringMVC04/user/getuser.do?pageNo=${page.bottomPageNo }"><input type="button" name="lastPage" value="尾页" /></a>
</td>
</tr>
</table>
</body>

...全文
338 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
西北灰狼 2017-01-16
  • 打赏
  • 举报
回复
这个问题我也遇到过,在后台传入一个判断的参数,符合该参数的执行部分查询的,不符合该参数的执行全部查询。 或者在查询19页的时候为页面赋值一个参数。request.setAttribute("msg","tt"),在jsp页面上接受,等查询下一页的时候传入该参数进行判断。
那年花 2017-01-10
  • 打赏
  • 举报
回复
我按照工号查询出19页的记录,每页10条, 这样一次性查出来跟没分页没什么差别 分页做的是分批查询 把页数 数据数 查询条件传到后台得出一个list再去前台遍历 每次点击下一页上一页这些再去查 不要一次性查
sqq4290 2016-12-30
  • 打赏
  • 举报
回复
调试跟踪点下一页时为什么EnId没有传过来
云晴 2016-12-29
  • 打赏
  • 举报
回复
我发现在我点击上一页或者下一页之后,hql语句的限制语句就不见了,如下:

//刚刚按工号为10查询出来的hql
Hibernate: 
    select
        count(*) as col_0_0_ 
    from
        t_attendance user0_ 
    where
        1=1 
        and EnID='10'
Hibernate: 
    select
        user0_.id as id1_0_,
        user0_.DateTime as DateTime2_0_,
        user0_.EnID as EnID3_0_,
        user0_.Name as Name4_0_ 
    from
        t_attendance user0_ 
    where
        1=1 
        and EnID='10' limit ?
//点击上一页下一页后的hql
Hibernate: 
    select
        count(*) as col_0_0_ 
    from
        t_attendance user0_ 
    where
        1=1
Hibernate: 
    select
        user0_.id as id1_0_,
        user0_.DateTime as DateTime2_0_,
        user0_.EnID as EnID3_0_,
        user0_.Name as Name4_0_ 
    from
        t_attendance user0_ 
    where
        1=1 limit ?, ?


81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧