单独使用mybatis 实现 数据库分页显示
实现图:
基本就是这么显示 点击下一页就直接跳转到下一页。
首先是:配置mybatis (配置流程)
导入jsp所需要的jar包jstl.jar 和 standard.jar (下载参考)
红框里表示在mybatis上添加的包和类
1.page.java
package com.ssm.pojo;
import java.util.List;
public class page {
//每页个数
private int pagesize;
//当前第几页
private int pagenumber;
//总数
private long total;
//当前页信息
private List<?> list;
public int getPagesize() {
return pagesize;
}
public void setPagesize(int pagesize) {
this.pagesize = pagesize;
}
public int getPagenumber() {
return pagenumber;
}
public void setPagenumber(int pagenumber) {
this.pagenumber = pagenumber;
}
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
public List<?> getList() {
return list;
}
public void setList(List<?> list) {
this.list = list;
}
}
2.PeopleService.java
package com.ssm.service;
import java.io.IOException;
import com.ssm.pojo.page;
public interface PeopleService {
/**
* 显示页面
* @return
* @throws IOException
*/
page showPage(int pagesize,int pagenumber)throws IOException;
}
3.PeopleServiceImpl.java
package com.ssm.service.impl;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.ssm.pojo.page;
import com.ssm.service.PeopleService;
public class PeopleServiceImpl implements PeopleService{
@Override
public page showPage(int pagesize,int pagenumber) throws IOException {
InputStream is = Resources.getResourceAsStream("sqlconfig.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
page p = new page();
p.setPagenumber(pagenumber);
p.setPagesize(pagesize);
Map<String, Object> map = new HashMap<>();
map.put("pageStart", pagesize*(pagenumber-1));
map.put("pageSize", pagesize);
p.setList(session.selectList("com.ssm.mapper.PeopleMapper.selAll",map));
//总条数
long count = session.selectOne("com.ssm.mapper.PeopleMapper.selCount");
p.setTotal(count%pagesize == 0 ? count/pagesize : count/pagesize+1);
return p;
}
}
4.ShowServlet.java
package com.ssm.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ssm.pojo.page;
import com.ssm.service.PeopleService;
import com.ssm.service.impl.PeopleServiceImpl;
//大部分注解都有默认属性,如果注解中只给默认属性赋值,可以省略属性名
//否则在注解的(属性名=属性值)格式
//如果一个属性是数组类型格式:属性名={值,值},如果该数组只有一个值,可以省略大括号
//如果类不是一个基本类型或者String而是一个类类型,语法:属性名=@类型
//注解中@表示引用注解声明
@WebServlet("/page")
public class ShowServlet extends HttpServlet{
private PeopleService PeopleService = new PeopleServiceImpl();
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
String pagesizeString = arg0.getParameter("pagesize");
int pagesize = 2;
if(pagesizeString != null && pagesizeString != ""){
pagesize = Integer.parseInt(pagesizeString);
}
String pagenumberString = arg0.getParameter("pagenumber");
int pagenumber = 1;
if(pagenumberString != null && pagenumberString != ""){
pagenumber = Integer.parseInt(pagenumberString);
}
page p = PeopleService.showPage(pagesize, pagenumber);
arg0.setAttribute("page", p);
arg0.getRequestDispatcher("index.jsp").forward(arg0, arg1);
}
}
5.index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 一旦需要使用循环遍历,则添加 如:<c:forEach> -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
</tr>
<c:forEach items="${page.list}" var="p">
<tr>
<td>${p.id}</td>
<td>${p.name}</td>
<td>${p.age}</td>
</tr>
</c:forEach>
</table>
<a href="page?pagenumber=${page.pagenumber-1}&pagesize=${page.pagesize}" <c:if test="${page.pagenumber<=1}"> onclick="javascript:return false;" </c:if> >上一页</a>
<a href="page?pagenumber=${page.pagenumber+1}&pagesize=${page.pagesize}" <c:if test="${page.pagenumber>=page.total}"> onclick="javascript:return false;" </c:if> >下一页</a>
</body>
</html>
6.mapper.xml中SQL语句
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ssm.mapper.PeopleMapper">
<select id="selAll" resultType="people" parameterType="map">
select * from people limit #{pageStart},#{pageSize}
</select>
<select id="selCount" resultType="long">
select count(*) from people
</select>
</mapper>