新西兰服务器

如何使用Mybatis实现分页效果


如何使用Mybatis实现分页效果

发布时间:2021-12-12 09:46:38 来源:高防服务器网 阅读:90 作者:小新 栏目:开发技术

这篇文章主要介绍如何使用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实现分页效果”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注高防服务器网行业资讯频道!

[微信提示:高防服务器能助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]
[