实现分页查询功能,由于项目是写完之后才做的总结,有些过程不好在这里面记录,而且前端的页面的代码也没有在这里贴,理解起来有困难,我也只能按照自己的理解来写。
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