• SpringData JPA查询分页demo


    SpringData JPA 的 PagingAndSortingRepository接口已经提供了对分页的支持,查询的时候我们只需要传入一个 org.springframework.data.domain.Pageable

    接口的实现类,指定PageNumber和pageSize即可

    springData包中的 PageRequest类已经实现了Pageable接口,我们可以直接使用下边是部分代码:

    DAO:

    package com.jiaoyiping.jdjy.sourcecode.dao;
    
    import com.jiaoyiping.jdjy.sourcecode.bean.SourceCode;
    import org.springframework.data.repository.PagingAndSortingRepository;
    
    /**
     * Created with IntelliJ IDEA.
     * User: 焦一平
     * Date: 14-11-20
     * Time: 下午11:18
     * To change this template use File | Settings | File Templates.
     */
    public interface SourceCodeDao extends PagingAndSortingRepository<SourceCode, String> {
    
    }

    service:

    package com.jiaoyiping.jdjy.sourcecode.service;
    
    import com.jiaoyiping.jdjy.sourcecode.bean.SourceCode;
    import com.jiaoyiping.jdjy.sourcecode.dao.SourceCodeDao;
    import org.apache.solr.client.solrj.SolrServerException;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.PageRequest;
    
    import javax.transaction.Transactional;
    import java.io.IOException;
    import java.sql.Timestamp;
    import java.util.List;
    
    /**
     * Created with IntelliJ IDEA.
     * User: 焦一平
     * Date: 14-11-20
     * Time: 下午11:24
     * To change this template use File | Settings | File Templates.
     */
    public class SourceCodeService {
        @Autowired
        private SourceCodeDao sourceCodeDao;public Page<SourceCode> getSourceCode(int pageNumber,int pageSize){
            PageRequest request = this.buildPageRequest(pageNumber,pageSize);
            Page<SourceCode> sourceCodes= this.sourceCodeDao.findAll(request);
            return sourceCodes;
        }
      //构建PageRequest
    private PageRequest buildPageRequest(int pageNumber, int pagzSize) { return new PageRequest(pageNumber - 1, pagzSize, null); } }

    controller:

    package com.jiaoyiping.jdjy.sourcecode.controller;
    
    
    import com.jiaoyiping.jdjy.sourcecode.Const;
    import com.jiaoyiping.jdjy.sourcecode.bean.SourceCode;
    import com.jiaoyiping.jdjy.sourcecode.service.SourceCodeService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.domain.Page;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Created with IntelliJ IDEA.
     * User: 焦一平
     * Date: 14-11-20
     * Time: 下午11:22
     * To change this template use File | Settings | File Templates.
     */
    @Controller
    @RequestMapping(value = "/sourcecode")
    public class SourceCodeController {
        @Autowired
        private SourceCodeService sourceCodeService;
    
        
        @RequestMapping(value = "list")
        public ModelAndView listSourceCode(HttpServletRequest request, HttpServletResponse response){
            String pageNumberStr=request.getParameter("pageNumber");
            if(pageNumberStr==null ||"".equals(pageNumberStr)){
                pageNumberStr="1";
            }
            int pageNumber = Integer.parseInt(pageNumberStr);
            int pageSize = Const.PAGE_SIZE;
            ModelAndView modelAndView = new ModelAndView();
            modelAndView.setViewName("/sourcecode/listSourceCode");
            Page<SourceCode> sourceCodes = this.sourceCodeService.getSourceCode(pageNumber, pageSize);
            modelAndView.addObject("sourceCodeList",sourceCodes.getContent());
            modelAndView.addObject("totalPageNumber",sourceCodes.getTotalElements());
    modelAndView.addObject("pageSize",pageSize);
    return modelAndView; } }

     前端分页:

    前端分页组件我们使用bootstrap提供的分页组件:

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%--
      Created by IntelliJ IDEA.
      User: 焦一平
      Date: 2014/12/27
      Time: 9:57
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
      String basePath = request.getContextPath();
      String MethodURL=basePath+"/sourcecode/list.action?pageNumber=";
    %>
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="utf-8"/>
      <title>源代码列表</title>
    
      <link href="<%=basePath%>/resources/assets/css/bootstrap.min.css" rel="stylesheet"/>
      <script type="text/javascript" src="<%=basePath%>/resources/js/jquery/jquery.js"></script>
    
    
      <script type="text/javascript">
        $(document).ready(function(){
          var totalNumber = Number(${totalPageNumber});
          var pageSize = Number(${pageSize});
          var pageCount = totalNumber/pageSize;
          var html = "";
          for(var i = 0;i<pageCount;i++){
            var link_Url = "<li><a href="<%=MethodURL%>"+(i+1)+"">"+(i+1)+"</a></li>";
            html += link_Url;
          }
          var fenyeDiv = document.getElementById("link");
          fenyeDiv.innerHTML=html;
        });
      </script>
    </head>
    <body>
    <a href="#" class="list-group-item active">
      源代码列表
    </a>
        <c:forEach items="${sourceCodeList}" var="sourceCode">
          <a href="<%=request.getContextPath()%>/sourcecode/detail.action?id=<c:out value="${sourceCode.id}" />" class="list-group-item"><c:out value="${sourceCode.title}" /></a>
        </c:forEach>
    <!-- 列表分页的DIV,由JS动态填充内容-->
    <ul class="pagination pagination-lg" id="link">
    
    </ul><br>
    
    </body>
    </html>

    最终结果如下:

  • 相关阅读:
    硬件04:反馈与触发器
    硬件03:二进制减法器
    硬件02:二进制加法器
    ASP.NET MVC 表单提交多层子级实体集合数据到控制器中
    微信全局获取并缓存Accesstoken的值
    MySQL 中文显示乱码
    HTML5 Canvas绘图详解 drawImage() 方法 有图有真相!
    [原创]超强C#图片上传,加水印,自动生成缩略图源代码
    微信公共服务平台开发(.Net 的实现)5-------解决access_token过期的问题 .
    2015-10-19深圳面试
  • 原文地址:https://www.cnblogs.com/jiaoyiping/p/4189114.html
Copyright © 2020-2023  润新知