实现分页查询功能,由于项目是写完之后才做的总结,有些过程不好在这里面记录,而且前端的页面的代码也没有在这里贴,理解起来有困难,我也只能按照自己的理解来写。
public class Pager { private int pageIndex;//当前页码 private int pageSize=3;//每页显示几条记录 private int totalCount;//每页总的数量 private int totalPages;//总的页数 public int getPageIndex() { pageIndex=pageIndex<=0?pageIndex=1:pageIndex; pageIndex=pageIndex>=this.getTotalPages()?this.getTotalPages():pageIndex; //需要做一些处理:当前页就是首页的话,点击上一页我们让它置1,超过最大页数,把它置为最后一页。 return pageIndex; } public void setPageIndex(int pageIndex) { this.pageIndex = pageIndex; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } public int getTotalPages() { totalPages=(getTotalCount()-1)/getPageSize()+1; //已知总的记录数和每页显示的记录数,来求总页数。 return totalPages; } public void setTotalPages(int totalPages) { this.totalPages = totalPages; } public int getFirstParam(){ return (this.getPageIndex()-1)*getPageSize(); //sql中分页的方法:limit x,y 中x的求法。 } }
dao层实现分页查询需要使用到Pager类中的getFirstParam(),所以这里将Pager对象作为参数传入。
视图中一般会有显示该页共有多少个商品,所以要对每一种条件下的商品进行统计数量。
@Repository("articleDao") public interface ArticleDao { public List<Article> selectAllArticle(); public List<Article> selectArticleByFirst(@Param("firstLevel") String firstLevel, @Param("secondLevel") String secondLevel, @Param("title") String title, @Param("pager")Pager pager); public int count(@Param("firstLevel") String firstLevel, @Param("secondLevel") String secondLevel, @Param("title") String title); }
<?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="per.lc.sms.dao.ArticleDao"> <select id="selectAllArticle" resultType="Article"> select * from ec_article </select> <sql id="pageWhere"> <where> <if test="firstLevel !=null&&firstLevel !=‘‘ "> and TYPE_CODE like CONCAT("",#{firstLevel},"%") </if> <if test="secondLevel !=null&&secondLevel!=‘‘"> and TYPE_CODE=#{secondLevel} </if> <if test="title!=null&&title!=‘‘"> and title like CONCAT("%",#{title},"%") </if> </where> </sql> <select id="selectArticleByFirst" resultType="Article"> //分页功能对应的代码 select * from ec_article <include refid="pageWhere"></include> LIMIT #{pager.firstParam} , #{pager.pageSize} </select> <select id="count" resultType="int"> //统计数量 select count(*) from ec_article <include refid="pageWhere"></include> </select> </mapper>
public interface ArticleService { public List<Article> getAllArticle(); public List<Article> getArticleByFirst(String firstLevel, String secondLevel, String title, Pager pager); }
@Service("articleService") public class ArticleServiceImp implements ArticleService { @Resource private ArticleDao articleDao; @Override public List<Article> getAllArticle() { return articleDao.selectAllArticle(); } @Override public List<Article> getArticleByFirst(String firstLevel, String secondLevel, String title, Pager pager) { //当前的查询条件下,总共有多少条记录 int count=articleDao.count(firstLevel,secondLevel,title); pager.setTotalCount(count); return articleDao.selectArticleByFirst(firstLevel,secondLevel,title,pager); } }
@WebServlet("/list") public class ListServlet extends HttpServlet { private HttpServletRequest request; private HttpServletResponse response; private ArticleService service1; private ArticleTypeService typeService; @Override public void init() throws ServletException { super.init(); ServletContext servletContext=this.getServletContext(); //web容器启动,就会生成一个servletContext对象 WebApplicationContext context= WebApplicationContextUtils.getWebApplicationContext(servletContext); service1=(ArticleService) context.getBean("articleService"); typeService=(ArticleTypeService)context.getBean("articleTypeService"); //servlet与spring是两个不同的箱子,在servlet中要想使用spring管理的bean,就需要用这样的方式。 } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.request=req; this.response=resp; request.setCharacterEncoding("UTF-8"); String method=request.getParameter("method"); switch (method){ case "getAll": getAll(); break; } } private void getAll() throws ServletException, IOException { //获取当前页码 int pageIndex1=1; String pageIndex=request.getParameter("pageIndex"); if (pageIndex!=null&&pageIndex.length()!=0){ pageIndex1=Integer.valueOf(pageIndex); //将String转化为int类型 } Pager pager=new Pager(); pager.setPageIndex(pageIndex1); String firstLevel=request.getParameter("typeCode"); //获取二级目录的值 String secondLevel=request.getParameter("secondType"); // 二级目录的值前端通过一段脚本实现的: $(function () {
$("#secondType").change(function(){
window.location="${pageContext.request.contextPath}/list?method=getAll&typeCode=${typeCode}&secondType="+this.value;
});
$("#secondType").val("${secondType}");
}); //获取搜索框中的值 String title=request.getParameter("title"); request.setAttribute("secondType",secondLevel); request.setAttribute("title",title); if (!StringUtils.isEmpty(firstLevel)){ request.setAttribute("typeCode",firstLevel); //由一级目录来获取对应的二级目录 List<ArticleType> articleTypes=typeService.getSecondLevel(firstLevel); request.setAttribute("secondTypes",articleTypes); } //一级目录 List<ArticleType> articleTypes=typeService.getFirstLevel(); request.setAttribute("articleTypes",articleTypes); List<Article> articles=service1.getArticleByFirst(firstLevel,secondLevel,title,pager); request.setAttribute("pager",pager); request.setAttribute("articleList",articles); request.getRequestDispatcher("/WEB-INF/jsp/list.jsp").forward(request,response); } }
原文:https://www.cnblogs.com/liu-chen/p/11722278.html