最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Data JPA+kkpager實(shí)現(xiàn)分頁功能實(shí)例

 更新時間:2017年06月12日 10:10:40   作者:lfendo  
本篇文章主要介紹了Spring Data JPA+kkpager實(shí)現(xiàn)分頁功能實(shí)例,具有一定的參考價值,有興趣的可以了解一下

一、spring Data JPA分頁

分頁效果如下:

前臺表格用的是: Bootstrap

分頁插件用的是: kkpager

kkpager是一個js分頁展示控件,傳入簡單參數(shù)就能使用的分頁效果控件,github地址:https://github.com/pgkk/kkpager

項(xiàng)目結(jié)構(gòu):

FamilyMember實(shí)體類:

package com.fendo.entity; 
 
import java.io.Serializable; 
import java.util.Date; 
 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 
 
import org.hibernate.annotations.GenericGenerator; 
 
 
 
@Entity 
@Table(name="FAMILY_MEMBER") 
public class FamilyMember implements Serializable{ 
 
  private Integer id; 
  private String FamilyName; 
  private String FamilyCharge; 
  private String Mobile; 
  private String Email; 
  private String Address; 
  private Date CreateData; 
   
  @Id 
  @GeneratedValue(strategy=GenerationType.IDENTITY) 
  public Integer getId() { 
    return id; 
  } 
  public void setId(Integer id) { 
    this.id = id; 
  } 
   
   
  @Column(name="FAMILY_NAME") 
  public String getFamilyName() { 
    return FamilyName; 
  } 
  public void setFamilyName(String familyName) { 
    FamilyName = familyName; 
  } 
   
  @Column(name="FAMILY_CHARGE") 
  public String getFamilyCharge() { 
    return FamilyCharge; 
  } 
  public void setFamilyCharge(String familyCharge) { 
    FamilyCharge = familyCharge; 
  } 
   
  @Column(name="MOBILE") 
  public String getMobile() { 
    return Mobile; 
  } 
  public void setMobile(String mobile) { 
    Mobile = mobile; 
  } 
   
   
  @Column(name="EMAIL") 
  public String getEmail() { 
    return Email; 
  } 
  public void setEmail(String email) { 
    Email = email; 
  } 
   
  @Column(name="ADDRESS") 
  public String getAddress() { 
    return Address; 
  } 
  public void setAddress(String address) { 
    Address = address; 
  } 
   
  @Column(name="CREATE_DATA") 
  public Date getCreateData() { 
    return CreateData; 
  } 
  public void setCreateData(Date createData) { 
    CreateData = createData; 
  } 
  public FamilyMember() { 
    super(); 
    // TODO Auto-generated constructor stub 
  } 
  public FamilyMember(Integer id, String familyName, String familyCharge, String mobile, String email, String address, 
      Date createData) { 
    super(); 
    this.id = id; 
    FamilyName = familyName; 
    FamilyCharge = familyCharge; 
    Mobile = mobile; 
    Email = email; 
    Address = address; 
    CreateData = createData; 
  } 
 
   
} 

FamilyDao接口類:

package com.fendo.dao; 
 
import java.util.List; 
import java.util.Map; 
 
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 
import org.springframework.data.repository.PagingAndSortingRepository; 
 
import com.fendo.entity.FamilyMember; 
 
public interface FamilyDao extends PagingAndSortingRepository<FamilyMember, String>, JpaSpecificationExecutor<FamilyMember>{ 
 
 
} 

FamilyService服務(wù)接口類:

package com.fendo.service; 
 
import java.util.List; 
import java.util.Map; 
 
import com.fendo.entity.FamilyMember; 
 
public interface FamilyService { 
   
  public List<FamilyMember> getAll() throws Exception; 
   
  public FamilyMember save(FamilyMember familyMember) throws Exception; 
   
  public Map<String, Object> getUserBySearch(Map<String, String> familyArgs, final String sortType) throws Exception; 
 
} 

FamilyService服務(wù)接口實(shí)現(xiàn)類:

package com.fendo.service.imp; 
 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Map; 
 
import javax.persistence.criteria.CriteriaBuilder; 
import javax.persistence.criteria.CriteriaQuery; 
 
import org.apache.commons.lang.StringUtils; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.data.domain.Page; 
import org.springframework.data.domain.Pageable; 
import org.springframework.data.jpa.domain.Specification; 
 
import javax.persistence.criteria.Predicate; 
import javax.persistence.criteria.Root; 
import javax.transaction.Transactional; 
 
import org.springframework.stereotype.Service; 
 
import com.fendo.dao.FamilyDao; 
import com.fendo.entity.FamilyMember; 
import com.fendo.service.FamilyService; 
import com.fendo.util.PageUtils; 
 
@Service 
@Transactional 
public class FamilyServiceImp implements FamilyService{ 
 
  @Autowired 
  public FamilyDao familyDao; 
     
  @Override 
  public List<FamilyMember> getAll() throws Exception { 
    return (List<FamilyMember>) this.familyDao.findAll(); 
  } 
 
  @Override 
  public FamilyMember save(FamilyMember familyMember) throws Exception { 
    return familyDao.save(familyMember); 
  } 
 
  /** 
   * 查詢用戶信息列表(支持分頁和多條件查詢)。 
   *  
   */ 
  @Override 
  public Map<String, Object> getUserBySearch(Map<String, String> familyArgs, final String sortType) throws Exception { 
 
    // 獲得分頁對象pageable,并且在pageable中頁碼是從0開始,設(shè)定按照sortType升序排列 
    Pageable pageable = PageUtils.buildPageRequest(Integer.valueOf(familyArgs.get("pageNum")), 
        Integer.valueOf(familyArgs.get("pageSize")), sortType); 
    Page<FamilyMember> objPage = familyDao.findAll(new Specification<FamilyMember>() { 
 
      public Predicate toPredicate(Root<FamilyMember> root, CriteriaQuery<?> query, CriteriaBuilder cb) { 
        List<Predicate> lstPredicates = new ArrayList<Predicate>(); 
 
        if (StringUtils.isNotBlank(familyArgs.get("FamilyName"))) { 
          lstPredicates.add(cb.like(root.get("familyName").as(String.class), "%" + familyArgs.get("FamilyName") + "%")); 
        } 
        if (StringUtils.isNotBlank(familyArgs.get("Mobile"))) { 
          lstPredicates.add(cb.like(root.get("mobile").as(String.class), "%" + familyArgs.get("Mobile") + "%")); 
        } 
         
        Predicate[] arrayPredicates = new Predicate[lstPredicates.size()]; 
        return cb.and(lstPredicates.toArray(arrayPredicates)); 
      } 
    }, pageable); 
 
    return PageUtils.getPageMap(objPage); 
  } 
 
} 

前臺接受參數(shù)工具類:

package com.fendo.util; 
 
import java.util.HashMap; 
import java.util.Map; 
 
import javax.servlet.http.HttpServletRequest; 
 
/** 
 * 工具類 
 * @author fendo 
 * 
 */ 
public class FamilyUtil { 
 
  /** 
   * 封裝從前臺傳遞過來的查詢參數(shù)。 
   *  
   */ 
  public static Map<String, String> getSelArgsToMap(HttpServletRequest request) throws Exception { 
    Map<String, String> serArgs = new HashMap<String, String>(); 
 
    String FamilyName = request.getParameter("FamilyName"); 
    String Mobile = request.getParameter("Mobile"); 
 
     
    String pageNum = request.getParameter("pageNum") == null ? "1" : request.getParameter("pageNum"); 
    String pageSize = request.getParameter("pageSize") == null ? "10" : request.getParameter("pageSize"); 
 
    serArgs.put("FamilyName", FamilyName); 
    serArgs.put("Mobile", Mobile); 
     
    serArgs.put("pageNum", pageNum); 
    serArgs.put("pageSize", pageSize); 
 
    return serArgs; 
  } 
 
} 

分頁工具類:

package com.fendo.util; 
 
import java.util.HashMap; 
import java.util.Map; 
 
import org.apache.commons.lang3.StringUtils; 
import org.springframework.data.domain.Page; 
import org.springframework.data.domain.PageRequest; 
import org.springframework.data.domain.Sort; 
import org.springframework.data.domain.Sort.Direction; 
 
public class PageUtils { 
 
  /** 
   * 封裝分頁數(shù)據(jù)到Map中。 
   */ 
  public static Map<String, Object> getPageMap(Page<?> objPage) { 
     
    Map<String, Object> resultMap = new HashMap<String, Object>(); 
 
    resultMap.put("resultList", objPage.getContent()); // 數(shù)據(jù)集合 
    resultMap.put("totalNum", objPage.getTotalElements()); // 總記錄數(shù) 
    resultMap.put("totalPage", objPage.getTotalPages()); // 總頁數(shù) 
    resultMap.put("pageNum", objPage.getNumber()); // 當(dāng)前頁碼 
    resultMap.put("pageSize", objPage.getSize()); // 每頁顯示數(shù)量 
 
    return resultMap; 
  } 
 
  /** 
   * 創(chuàng)建分頁請求。 
   * 
   * @param pageNum 當(dāng)前頁 
   * @param pageSize 每頁條數(shù) 
   * @param sortType 排序字段 
   * @param direction 排序方向 
   */ 
  public static PageRequest buildPageRequest(int pageNum, int pageSize, String sortType, String direction) { 
    Sort sort = null; 
     
    if (!StringUtils.isNotBlank(sortType)) { 
      return new PageRequest(pageNum - 1, pageSize); 
    } else if (StringUtils.isNotBlank(direction)) { 
      if (Direction.ASC.equals(direction)) { 
        sort = new Sort(Direction.ASC, sortType); 
      } else { 
        sort = new Sort(Direction.DESC, sortType); 
      } 
      return new PageRequest(pageNum - 1, pageSize, sort); 
    } else { 
      sort = new Sort(Direction.ASC, sortType); 
      return new PageRequest(pageNum - 1, pageSize, sort); 
    } 
  } 
 
  /** 
   * 創(chuàng)建分頁請求(該方法可以放到util類中). 
   */ 
  public static PageRequest buildPageRequest(int pageNum, int pageSize, String sortType) { 
    return buildPageRequest(pageNum, pageSize, sortType, null); 
  } 
   
  /** 
   * 創(chuàng)建分頁請求 
   *  
   * @param pageNum 
   * @param pageSize 
   * @param sort 
   * @return 
   */ 
  public static PageRequest buildPageRequest(int pageNum, int pageSize, Sort sort) { 
    return new PageRequest(pageNum - 1, pageSize, sort); 
  } 
 
  /** 
   * 創(chuàng)建分頁請求(該方法可以放到util類中). 
   */ 
  public static PageRequest buildPageRequest(int pageNum, int pageSize) { 
    return buildPageRequest(pageNum, pageSize, null, null); 
  } 
 
} 

Controller類:

package com.fendo.controller; 
 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.servlet.ModelAndView; 
 
import com.fendo.entity.FamilyMember; 
import com.fendo.service.imp.FamilyServiceImp; 
import com.fendo.util.FamilyUtil; 
 
@Controller() 
@RequestMapping(value="DataTable") 
public class DataTableController { 
 
  @Autowired 
  public FamilyServiceImp FamilyMember; 
   
  @RequestMapping(value="/home_list") 
  public String home(Model model,HttpServletRequest request,HttpServletResponse response){ 
    Map<String, Object> resultMap = new HashMap<>(); 
    List<FamilyMember> list; 
    try { 
      list = FamilyMember.getAll(); 
      // 查詢表單或分頁保持請求時 請求參數(shù)的接收 
      Map<String, String> serArgs = new HashMap<String, String>(); 
      serArgs = FamilyUtil.getSelArgsToMap(request);//這個類在下面給出 
      resultMap = FamilyMember.getUserBySearch(serArgs, "CreateData"); //按創(chuàng)建時間排序 
      model.addAttribute("resultMap",resultMap); 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
     
    return "datatable"; 
  } 
} 

首頁datatable.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" 
  pageEncoding="utf-8"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<c:set var="ctx" value="${pageContext.request.contextPath}"/> 
<!DOCTYPE html> 
<html lang="zh-CN"> 
 <head> 
  <meta charset="utf-8"> 
  <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
  <meta name="viewport" content="width=device-width, initial-scale=1"> 
  <!-- 上述3個meta標(biāo)簽*必須*放在最前面,任何其他內(nèi)容都*必須*跟隨其后! --> 
  <title>Spring Data JPA分頁示例</title> 
 
  <!-- Bootstrap --> 
  <link href="${ctx}/css/bootstrap.min.css" rel="external nofollow" rel="stylesheet"> 
   
  <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> 
  <script src="${ctx}/js/jquery-1.10.2.min.js"></script> 
   
   
  <!-- Include all compiled plugins (below), or include individual files as needed --> 
  <script src="${ctx}/js/bootstrap.min.js"></script> 
   
  <script type="text/javascript" src="${ctx}/js/kkpager.min.js"></script> 
  <link rel="stylesheet" type="text/css" href="${ctx}/css/kkpager_blue.css" rel="external nofollow" /> 
 </head> 
 <body> 
 
  
   <div class="container"> 
 
    <div style="text-align:center"> 
     <h2>Spring Data JPA分頁示例</h2> 
    </div> 
     
  
    <div class="panel panel-primary"> 
     
     <div class="panel-heading"> 
      <h3 class="panel-title">數(shù)據(jù)表格</h3> 
     </div> 
     
 
     
      <div class="panel-body" > 
       
  <form class="form-inline" id="searchForm" method="post" action="${ctx}/DataTable/home_list"> 
     
    <div class="row"> 
       
       
     <div class="form-group col-sm-3"> 
      <input type="checkbox" id="inlineCheckbox1" value="option1"> 
      <label>選擇所有</label> 
     </div> 
       
     <div class="form-group col-sm-3"> 
      <label>家庭名:</label> 
      <input type="input" name="FamilyName" id="FamilyName" class="form-control" id="exampleInputName3" placeholder="用戶名"> 
     </div> 
      
      
     <div class="form-group col-sm-3"> 
      <label>手機(jī)號:</label> 
 
       
      <input type="input" name="Mobile" id="Mobile" class="form-control" id="exampleInputMobile3" placeholder="手機(jī)號"></input> 
       
       
     </div> 
      
     <div class="col-sm-3"> 
      <button type="submit" class="btn btn-primary">搜索</button> 
      <button type="button" class="btn btn-primary">刪除</button> 
     </div> 
      
 
       
    </div> 
     
      
  </form> 
       
  <table class="table table-hover" style="margin-top:2px;"> 
   <thead> 
    <tr> 
      <th></th> 
      <th>順序</th> 
      <th>家庭名稱</th> 
      <th>家庭Key</th> 
      <th>負(fù)責(zé)人</th> 
      <th>手機(jī)號</th> 
      <th>郵箱</th> 
      <th>家庭地址</th> 
      <th>創(chuàng)建時間</th> 
      <th>狀態(tài)</th> 
      <th>操作</th> 
    </tr> 
   </thead> 
   <tbody> 
    
    
    
   <c:forEach var="lise" items="${resultMap.resultList}" varStatus="status"> 
     <tr> 
       <td><input type="checkbox" id="inlineCheckbox1" value="option1"></td> 
       <th scope="row">${status.index+1}</th> 
       <td>${lise.familyName}</td> 
       <td>${lise.id}</td> 
       <td>${lise.familyCharge}</td> 
       <td>${lise.mobile }</td> 
       <td>${lise.email}</td> 
       <td>${lise.address}</td> 
       <td>${lise.createData}</td> 
       <td>啟用</td> 
       <td><a href="#" rel="external nofollow" >編輯</a></td> 
      </tr> 
     
   </c:forEach> 
    
   
     
 
    
   </tbody> 
  </table> 
       
      </div> 
    </div> 
     
    <div style="width:800px;margin:0 auto;"> 
     
    <div id="kkpager"></div> 
     
    </div> 
     
   
  </div> 
   
  <script> 
   
  var param = ""; 
   
   
  $(function() { 
    var totalPage = "${resultMap.totalPage}"; 
    var totalRecords = "${resultMap.totalNum}"; 
    var pageSize = "${resultMap.pageSize}"; 
 
    var pageNum = parseInt("${resultMap.pageNum}") + 1; 
    //初始化分頁控件 
    //有些參數(shù)是可選的,比如lang,若不傳有默認(rèn)值 
    kkpager.init({ 
      pno: pageNum, 
      //總頁碼 
      total: "${resultMap.totalPage}", 
      //總數(shù)據(jù)條數(shù) 
      totalRecords: totalRecords, 
      //鏈接前部 
      hrefFormer: '${ctx}/DataTable/home_list', 
      //鏈接尾部 
      hrefLatter: '', 
      getLink: function(n) { 
        return getInitParam() + "&pageNum=" + n + "&pageSize=" + pageSize; 
      }, 
      lang: { 
        prePageText: '上一頁', 
        nextPageText: '下一頁', 
        totalPageBeforeText: '共', 
        totalPageAfterText: '頁', 
        totalRecordsAfterText: '條數(shù)據(jù)', 
        gopageBeforeText: '轉(zhuǎn)到', 
        gopageButtonOkText: '確定', 
        gopageAfterText: '頁', 
        buttonTipBeforeText: '第', 
        buttonTipAfterText: '頁' 
      } 
    }); 
    //生成 
    kkpager.generPageHtml(); 
 
    $('#mykkpagerselect').val(pageSize); 
  }); 
   
   
  function getInitParam() { 
    var FamilyName = $('#FamilyName').val(); 
    var Mobile = $('#Mobile').val(); 
 
    var attr = "?FamilyName=" + encodeURI(encodeURI(FamilyName))  
        + "&Mobile=" + Mobile; 
    return "${ctx}/DataTable/home_list" + attr; 
  } 
 
  /** 
   * 搜索。 
   */ 
  function search() { 
    $('#searchForm').submit(); 
  }   
   
 
  </script> 
 
 </body> 
</html> 

完整示例: SpringData-JPA_jb51.rar

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java?Map.Entry的使用示例

    java?Map.Entry的使用示例

    Map.Entry是Java中Map接口的嵌套接口,它提供了獲取鍵和值的方法及遍歷和操作Map的鍵值對,本文就來詳細(xì)的介紹一下,感興趣的可以了解一下
    2024-11-11
  • SpringCloud融入Python的實(shí)現(xiàn)

    SpringCloud融入Python的實(shí)現(xiàn)

    這篇文章主要介紹了SpringCloud融入Python的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 使用SpringBoot注解方式處理事務(wù)回滾實(shí)現(xiàn)

    使用SpringBoot注解方式處理事務(wù)回滾實(shí)現(xiàn)

    這篇文章主要介紹了使用SpringBoot注解方式處理事務(wù)回滾實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • java中的JSONP使用實(shí)例詳解

    java中的JSONP使用實(shí)例詳解

    json和JSONP這二者在開發(fā)中還是很常見的,本文重點(diǎn)給大家介紹下java中的jsonp使用實(shí)例詳解,需要的朋友參考下
    2017-04-04
  • java并發(fā)編程專題(七)----(JUC)ReadWriteLock的用法

    java并發(fā)編程專題(七)----(JUC)ReadWriteLock的用法

    這篇文章主要介紹了java ReadWriteLock的用法,文中講解非常詳細(xì),示例代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • IDEA自定義常用代碼塊及自定義快捷摸板

    IDEA自定義常用代碼塊及自定義快捷摸板

    這篇文章主要介紹了IDEA自定義常用代碼塊及自定義快捷摸板的相關(guān)知識,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-09-09
  • 支票金額大寫轉(zhuǎn)換示例(金額大寫轉(zhuǎn)換器)

    支票金額大寫轉(zhuǎn)換示例(金額大寫轉(zhuǎn)換器)

    這篇文章主要介紹了支票金額大寫轉(zhuǎn)換示例(金額大寫轉(zhuǎn)換器),需要的朋友可以參考下
    2014-02-02
  • 深入講解Java的對象頭與對象組成

    深入講解Java的對象頭與對象組成

    由于Java面向?qū)ο蟮乃枷?在JVM中需要大量存儲對象,存儲時為了實(shí)現(xiàn)一些額外的功能,需要在對象中添加一些標(biāo)記字段用于增強(qiáng)對象功能,這些標(biāo)記字段組成了對象頭,下面這篇文章主要給大家介紹了關(guān)于Java對象頭與對象組成的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • java實(shí)現(xiàn)順時針打印矩陣

    java實(shí)現(xiàn)順時針打印矩陣

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)順時針打印矩陣的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • java對象持久化保存的方法詳解

    java對象持久化保存的方法詳解

    這篇文章主要介紹了java對象持久化保存的方法詳解,在java應(yīng)用開發(fā)的過程中,經(jīng)常遇到需要持久保存java對象的情況,比如:用戶信息、博客評論內(nèi)容等等,本文針對java對象的持久化保存方法進(jìn)行討論,簡述各個方法的優(yōu)劣,需要的朋友可以參考下
    2023-07-07

最新評論

怀化市| 安吉县| 乐业县| 大连市| 兴业县| 天等县| 浮山县| 定襄县| 墨江| 徐水县| 贺兰县| 筠连县| 太康县| 松滋市| 克什克腾旗| 沙洋县| 福安市| 南丰县| 大洼县| 六枝特区| 清镇市| 内乡县| 汉中市| 梧州市| 深泽县| 苍南县| 江华| 上蔡县| 梁平县| 泾源县| 玉屏| 莱阳市| 蓬安县| 英吉沙县| 乌什县| 本溪市| 龙泉市| 景德镇市| 特克斯县| 红桥区| 科技|