电商模块开发-第五天

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

  • 需要一个实体类封装分页所必要的属性与方法
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层及其实现

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&amp;&amp;firstLevel !='' ">
                and TYPE_CODE like CONCAT("",#{firstLevel},"%")
            </if>
            <if test="secondLevel !=null&amp;&amp;secondLevel!=''">
                and TYPE_CODE=#{secondLevel}
            </if>
            <if test="title!=null&amp;&amp;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); } }

猜你喜欢

转载自www.cnblogs.com/liu-chen/p/11722278.html
今日推荐