Mybatis 实现分页效果

一、创建分页的工具类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();
  }
}

关于使用Mybatis实现分页效果示例的文章就介绍至此,更多相关Mybites实现分页内容请搜索编程宝库以前的文章,希望以后支持编程宝库

 1、题目统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5 ...