Spring Data JPA+kkpager实现分页功能实例

网友投稿 267 2023-05-08


Spring Data JPA+kkpager实现分页功能实例

一、spring Data JPA分页

分页效果如下:

前台表格用的是: Bootstrap

分页插件用的是: kkpager

kkpager是一个js分页展示控件,传入简单参数就能使用的分页效果控件,github地址:https://github.com/pgkk/kkpager

项目结构:

FamilyMember实体类:

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, JpaSpecificationExecutor{

}

FamilyService服务接口类:

package com.fendo.service;

import java.util.List;

import java.util.Map;

import com.fendo.entity.FamilyMember;

public interface FamilyService {

public List getAll() throws Exception;

public FamilyMember save(FamilyMember familyMember) throws Exception;

public Map getUserBySearch(Map familyArgs, final String sortType) throws Exception;

}

FamilyService服务接口实现类:

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 getAll() throws Exception {

return (List) this.familyDao.findAll();

}

@Override

public FamilyMember save(FamilyMember familyMember) throws Exception {

return familyDao.save(familyMember);

}

/**

* 查询用户信息列表(支持分页和多条件查询)。

*

*/

@Override

public Map getUserBySearch(Map familyArgs, final String sortType) throws Exception {

// 获得分页对象pageable,并且在pageable中页码是从0开始,设定按照sortType升序排列

Pageable pageable = PageUtils.buildPageRequest(Integer.valueOf(familyArgs.get("pageNum")),

Integer.valueOf(familyArgs.get("pageSize")), sortType);

Page objPage = familyDao.findAll(new Specification() {

public Predicate toPredicate(Root root, CriteriaQuery> query, CriteriaBuilder cb) {

List lstPredicates = new ArrayList();

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);

}

}

前台接受参数工具类:

package com.fendo.util;

import java.util.HashMap;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

/**

* 工具类

* @author fendo

*

*/

public class FamilyUtil {

/**

* 封装从前台传递过来的查询参数。

*

*/

public static Map getSelArgsToMap(HttpServletRequest request) throws Exception {

Map serArgs = new HashMap();

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 {

/**

* 封装分页数据到Map中。

*/

public static Map getPageMap(Page> objPage) {

Map resultMap = new HashMap();

resultMap.put("resultList", objPage.getContent()); // 数据集合

resultMap.put("totalNum", objPage.getTotalElements()); // 总记录数

resultMap.put("totalPage", objPage.getTotalPages()); // 总页数

resultMap.put("pageNum", objPage.getNumber()); // 当前页码

resultMap.put("pageSize", objPage.getSize()); // 每页显示数量

return resultMap;

}

/**

* 创建分页请求。

*

* @param pageNum 当前页

* @param pageSize 每页条数

* @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);

}

}

/**

* 创建分页请求(该方法可以放到util类中).

*/

public static PageRequest buildPageRequest(int pageNum, int pageSize, String sortType) {

return buildPageRequest(pageNum, pageSize, sortType, null);

}

/**

* 创建分页请求

*

* @param pageNum

* @param pageSize

* @param sort

* @return

*/

public static PageRequest buildPageRequest(int pageNum, int pageSize, Sort sort) {

return new PageRequest(pageNum - 1, pageSize, sort);

}

/**

* 创建分页请求(该方法可以放到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;

@Controllhttp://er()

@RequestMapping(value="DataTable")

public class DataTableController {

@Autowired

public FamilyServiceImp FamilyMember;

@RequestMapping(value="/home_list")

public String home(Model model,HttpServletRequest request,HttpServletResponse response){

Map resultMap = new HashMap<>();

List list;

try {

list = FamilyMember.getAll();

// 查询表单或分页保持请求时 请求参数的接收

Map serArgs = new HashMap();

serArgs = FamilyUtil.getSelArgsToMap(request);//这个类在下面给出

resultMap = FamilyMember.getUserBySearch(serArgs, "CreateData"); //按创建时间排序

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" %>

顺序

家庭名称

家庭Key

负责人

手机号

邮箱

家庭地址

创建时间

状态

操作

<td>${lise.address}

完整示例: SpringData-JPA_jb51.rar


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:实现序列化的接口(序列化的实现类)
下一篇:Java最简单的DES加密算法实现案例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~