第一,需要一个封装好的page类
需要有五个属性
private int totalNum; //4.总条数
private int pageNo; //2.页码
private int pageSize; //3.每页显示记录数
private int tatalPage; //1.总页数
private List<Emp> list; //需要显示的数据
public Page(int totalNum, int pageNo, int pageSize,
List<Emp> list) {
this.totalNum = totalNum;
this.pageNo = pageNo;
this.pageSize = pageSize;
int temp=totalNum/pageSize;
this.tatalPage = totalNum%pageSize==0?temp:temp+1;
this.list = list;
}
前台只需要传入当前页码即可,每页显示的的条数事先写好的。
总条数写一个方法得到,注:这里用的是mybatis
//得到总页数
public int list(String name,String i){
Map<String, Object> map=new HashMap<String, Object>();
map.put("pid", i); //根据id查找
map.put("pname", name); //根据名字模糊查找
SqlSession sqlSession = sqlSessionFactory.openSession();
List<Emp> selectList = sqlSession.selectList("empNamespace.listAll",map);
int size = selectList.size();
return size;
}
//mapping、
<select id="listAll" resultMap="empMap" parameterType="map">
SELECT * from emps
<where>
<if test="pname!= null">
and ename like concat('%',#{pname},'%')
</if>
<if test="pid!=null and pid!= '' ">
and eid =#{pid}
</if>
</where>
</select>
得到page
public Page listEmp(String name,String i,int pageNo,int pageSize) {
int totalNum=list(name,i); // //4.总条数
Map<String, Object> map=new HashMap<String, Object>();
map.put("pid", i); //根据id查找
map.put("pname", name); //根据名字模糊查找
int start =(pageNo-1)*pageSize;
map.put("start",start ); //开始
map.put("end", pageSize); //结束
System.out.println(map);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<Emp> list=sqlSession.selectList("empNamespace.list",map);
sqlSession.close();
Page page = new Page(totalNum,pageNo,pageSize,list);
return page;
}
mapping
<select id="list" resultMap="empMap" parameterType="map">
SELECT * from emps
<where>
<if test="pname!= null">
and ename like concat('%',#{pname},'%')
</if>
<if test="pid!=null and pid!= '' ">
and eid =#{pid}
</if>
</where>
limit #{start},#{end}
</select>
在action中代码
注意:最开始pageno需要事先判断一下。赋初值,因为刚开始是null
private int pageSize=3;
@RequestMapping(value="/listAll")
public String listMethod(Model model,String nameBy,String idBy,Integer pageNo) throws Exception{
//调用业务层
if(pageNo == null ){
pageNo=1;
}
System.out.println("名字为:"+nameBy);
System.out.println("id名字为:"+idBy);
System.out.println("pageNo名字为:"+pageNo);
System.out.println("----------------------------------------------------------");
Page page = empService.listAll(nameBy,idBy,pageNo,pageSize);
model.addAttribute("page", page);
model.addAttribute("nameBy", nameBy);//回显
System.out.println(page.getList());
return "list";
}
在jsp中代码:
别忘了设置隐藏pageNo。
<input type="hidden" name="pageNo" id="pageNo" value="${ nameBy}">
<c:choose>
<c:when test="${ page.totalNum >0}">
一共${ page.totalNum}条记录,一共${ page.tatalPage}页,当前${ page.pageNo}页,
<a href="javascript:goPage(1)">首页</a>
<c:if test="${(page.pageNo - 1) >0 }">
<a href="javascript:goPage(${ page.pageNo }-1)">上一页</a>
</c:if>
<c:if test="${(page.pageNo ) < page.tatalPage}">
<a href="javascript:goPage(${ page.pageNo }+1)">下一页</a>
</c:if>
<a href="javascript:goPage(${ page.tatalPage })">末页</a>
</c:when>
<c:otherwise>
<font color="red">没有查询到数据!</font>
</c:otherwise>
</c:choose>
<script type="text/javascript">
function goPage(pageNo){
document.getElementById("pageNo").value = pageNo;
var form = document.getElementById("form1");
form.submit();
}
</script>