一、创建分页的工具类PageUti,存储分页所需要的五个数据:pageIndex(当前页码),pageSize(每页记录条数),count(总记录数),pageNum(总页数),list(每一页的内容)。
public class PageUtil<T> {
//当前页码
private int pageIndex;
//每页记录数
private int pageSize;
//总记录数
private int count;
//总页数
private int pageNum;
//每一页的内容
private List<T> list;
}
二、xml文件:MySQL对分页的支持是通过limit子句。
如:
# 每页10条记录,取第一页,返回的是前10条记录
select * from books limit (1-1)*10,10;
# 每页10条记录,取第二页,返回的是第11条记录,到第20条记录,
select * from books limit (2-1)*10,10;
所以:limit的第一个参数=(当前页码-1)*每页记录数
<!--分页,查询当前页的内容-->
<select id="getBooksPage" resultType="list" parameterType="map">
select * from books limit #{pageIndex},#{pageSize}
</select>
<!--查询总记录数-->
<select id="getCount" resultType="int" parameterType="map">
select count(*) from books
</select>
三、BooksServiceImpl.java:将limit需要的两个参数存入map集合中,再将分页所需要的五个数据封装。
public PageUtil<Books> getBooksPage(int pageIndex, int pageSize) {
PageUtil<Books> pageUtil=new PageUtil<>();
SqlSession sqlSession= MybatisUtil.getSqlSession();
try {
//booksMapper是使用动态代理模式,运行反射机制,创建的一个代理对象
BooksMapper booksMapper=sqlSession.getMapper(BooksMapper.class);
Map map=new HashMap();
int row=booksMapper.getCount(map);
//计算总页数
int pageCount= (int) Math.ceil((double) row / pageSize);
//limit的第一个参数=(当前页码-1)*每页记录数
map.put("pageIndex",(pageIndex - 1) * pageSize);
map.put("pageSize", pageSize);
List<Books> list=booksMapper.getBooksPage(map);
//将数据封装
pageUtil.setPageIndex(pageIndex);
pageUtil.setPageSize(pageSize);
pageUtil.setCount(row);
pageUtil.setPageNum(pageCount);
pageUtil.setList(list);
}catch (Exception e){
e.printStackTrace();
}finally {
sqlSession.close();
}
return pageUtil;
}
四、servlet:
protected void getBooks(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if(request.getParameter("pageIndex")!=null) {
int pageIndex=Integer.parseInt(request.getParameter("pageIndex"));
show(response,pageIndex,search);
}else {
show(response);
}
}
private void show(HttpServletResponse response,Object ...ages) throws IOException {
int pageIndex = 1;//默认第一页
if(ages.length>0){
pageIndex=(int)ages[0];
}
PageUtil pageUtil=new PageUtil();
//每页10条数据
pageUtil=new BooksServiceImpl().getBooksPage(pageIndex,10);
String js= JSON.toJSONString(pageUtil);
PrintWriter pw=response.getWriter();
pw.write(js);
}
五、前段页面
显示分页:
var page = "<li>共" + data.count + "条,共" + data.pageNum + "页,当前第" + data.pageIndex + "页</li>";
page += "<li><a href='#' onclick='myPage(1)'>首页</a></li>";
if (data.pageIndex == 1) {
page += "<li><a href='#' onclick='myPage(1)'>上一页</a></li>";
} else {
page += "<li><a href='#' onclick='myPage(" + (data.pageIndex - 1) + ")'>上一页</a></li>";
}
// for (var i = 1; i <= data.pageNum; i++) {
// page += "<a href='#' onclick='myPage(" + i + ")'>" + i + "</a>"
// }
if (data.pageIndex < data.pageNum) {
page += "<li><a href='#' onclick='myPage(" + (data.pageIndex + 1) + ")'>下一页</a></li>";
} else {
page += "<li><a href='#' onclick='myPage(" + data.pageNum + ")'>下一页</a></li>";
}
page += "<li><a href='#' onclick='myPage(" + data.pageNum + ")'>末页</a></li>";
点击分页(myPage):通过ajax请求将页码传到servlet
function myPage(index) {
console.log(index)
$.getJSON("books/getBooks.do", {"pageIndex": index}, function (data) {
showBooks(data)
});
}
六、MybatisUtil.java工具类:向外提供一个方法,可以获取SqlSession对象
public class MybatisUtil {
static SqlSessionFactory sqlSessionFactory;
// 加载主配置文件,并创建 sqlSessionFactory
static {
String resource = "com/xmx/config/mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
public static SqlSession getSqlSession() {
// return sqlSessionFactory.openSession(true);
return sqlSessionFactory.openSession();
}
}
到此这篇关于使用Mybatis实现分页效果示例的文章就介绍到这了,更多相关Mybites实现分页内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!