Mybatis实现分页
丹哥大弟子 人气:0一、创建分页的工具类PageUti,存储分页所需要的五个数据:pageIndex(当前页码),pageSize(每页记录条数),count(总记录数),pageNum(总页数),list(每一页的内容)。
/** * @param <T> 泛型类 */ 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); } /** * @Description: 向外提供一个方法,可以获取SqlSession对象 * @Return: org.apache.ibatis.session.SqlSession */ public static SqlSession getSqlSession() { // return sqlSessionFactory.openSession(true); return sqlSessionFactory.openSession(); } }
加载全部内容