Spring MVC结合Spring Data JPA实现按条件查询和分页

本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下

推荐视频:尚硅谷Spring Data JPA视频教程,一学就会,百度一下就有。

后台代码:在DAO层继承Spring Data JPA的PagingAndSortingRepository接口实现的 (实现方法主要在SbglServiceImpl.java类中)

前台表现:用kkpaper表现出来

实现效果:

Spring MVC结合Spring Data JPA实现按条件查询和分页

1、实体类

package com.jinhetech.yogurt.sbgl.entity;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;
import org.springframework.cache.annotation.Cacheable;
@Entity
@Table(name="SYS_SBGL")
@PrimaryKeyJoinColumn(name = "SBBM")
@Cacheable(value = "baseCache")
public class Sbgl implements Serializable{

  private static final long serialVersionUID = -1423899016746755470L;

  @Id
  private String sbbm;

  private String sbmc;
  private String sblx;
  private String sssx;
  private String ssjd;

  private String azsj;
  private String azry;
  private String sbzt;
  private String sbjd;
  private String sbwd;

  private String wxlxr;
  private String wxlxdh;
  private String sbywxcs;
  private String jzpylyz;
  private String mqsbcyr;
  private String bzsm;

  //setter、getter方法省略

}

2、jsp页面,看最下面的分页组件(kkpaper)

resultMap集合是下面Controller中最后查询和分页后获得的所有数据信息,resultMap.resultList:resultList是Map集合的属性,里面存着<key,value>数据

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
<!doctype html>

<c:set var="ctx" value="${pageContext.request.contextPath}" scope="session"/>

<html>
<head>
  <title>设备管理</title>
  <!-- zTree需要的样式和js -->
  <link rel="stylesheet" href="${ctx }/yogurtResource/assembly/ztree/css/zTreeStyle.css" rel="external nofollow" type="text/css">
  <script type="text/javascript" src="${ctx }/yogurtResource/assembly/ztree/jquery.ztree.core-3.5.js"></script>
  <script type="text/javascript" src="${ctx }/yogurtResource/assembly/ztree/jquery.ztree.excheck-3.5.js"></script>

  <!-- 验证框架 -->
  <script type="text/javascript" src="${ctx }/yogurtResource/assembly/yogurt/user/formValidate.js"></script>

  <!-- 修改表单验证错误提示样式 -->
  <style type="text/css">
    .table-bordered-ul li{ margin:0 5px; float:left}
    label.error {
     padding-left: 16px;

     padding-bottom: 2px;

     font-weight: bold;

     color: #F00;
    }
  </style>

  <script type="text/javascript">
  function console(consoleTag, userId, stateTag) {
      // 添加用户。
    if("add" == consoleTag) {
      $('#formid').prop("action", "${ctx}/sbgl/sbgl_add_list");
    }

  }

  /**
   * 搜索。
   */
  function search() {
    $('#searchForm').submit();
  }      

  </script>

</head>

<body>
  <div class="clear">
    <div class="panel panel-default yogurt_route" id="yogurt_route">
      <a href="${ctx }/home/home_list" rel="external nofollow" >首页</a> > <a
        href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" onclick="navigate();">设备管理</a> > 设备列表
    </div>
  </div>

  <ul id="bqnum">
    <li><a href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" onclick="navigate();">导航</a>
    </li>
    <li><a href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" onclick="orgTree();">机构</a>
    </li>
  </ul>

  <!-- 根据条件查询 -->
  <div class="clear ppd10" style="line-height:32px">
    <form action="${ctx }/sbgl/sbgl_list" method="post" id="searchForm">
      <div style="float:left; width:200px">
        设备名称:
        <input type="text" name="serSbmc" id="serSbmc" >
      </div>
      <div class="floatleft">
          设备类型:
        <input type="text" name="serSblx" id="serSblx" >
      </div>
      <div class="floatleft">
          所属市县:
        <input type="text" name="serSssx" id="serSssx" >
      </div>
      <div class="floatleft">
          基地名称:
        <input type="text" name="serJdmc" id="serJdmc" >
      </div>
      <div class="floatleft">
          设备状态:
        <select class="form-control" style="display:inline-block; width:80px" name="serSbzt" id="serSbzt">
          <option value="">全部</option>
          <option value="Y">正常</option>
          <option value="N">异常</option>
        </select>
      </div>    
      <button type="submit" class="btn btn-success yogurt_search_button" onclick="search();">
        <img src="${ctx }/yogurtResource/images/Panel/search.png" width="18" height="18" />
      </button>
    </form>
  </div>

  <!-- 新增、删除 -->
  <div class="panel panel-default" style="margin-top:10px">
    <div class="yogurt_panel_title_core">
      <span class="state_bold">共查询出数据结果:<span class="state_red">${resultMap.totalNum}</span>条</span>
    </div>
    <div class="more_core3">
      <!-- <button type="button" class="btn btn-success yogurt_search_button2" onclick="console('add','');">新增设备</button> -->
      <button type="button" class="btn btn-success yogurt_search_button2" onclick="window.location.href='${ctx }/sbgl/sbgl_add_list' ">新增设备</button>
      <button type="button" class="btn btn-success yogurt_search_button2" onclick="console('delete','');">删除设备</button>
    </div>
  </div>
  <!-- 列表 -->
  <div class="yogurt_elementsbox_core clear">
    <div class="yogurt_elementsbox_table_article" id="yogurt_elementsbox_table_article">
      <table id="tableBody" border="0" cellspacing="0" cellpadding="0" class="table yogurt_elementsbox_table">
        <thead>
          <tr class="yogurt_tab_back" onmouseover="this.className='yogurt_tab_trhover'" onmouseout="this.className='yogurt_tab_back'">
            <th width="3%"><input type="checkbox" onClick="allchecked(this)"></th>
            <th width="10%">设备名称</th>
            <th width="10%">设备类型</th>
            <th width="10%">所属市县</th>
            <th width="10%">基地名称</th>
            <th width="10%">设备状态</th>
            <th width="10%">维修联系人</th>
            <th width="10%">联系电话</th>
            <th width="10%">设备持有人</th>
            <th width="17%" style="text-align:center;">操作</th>
          </tr>
        </thead>
        <tbody id="userTb">
          <c:forEach var="sbgl" items="${resultMap.resultList}" varStatus="status">
            <tr>
              <td><input type="checkbox" ></td>
              <td>${sbgl.sbmc }</td>
              <td>${sbgl.sblx }</td>
              <td>${sbgl.sssx }</td>
              <td>${sbgl.ssjd }</td>
              <td>${sbgl.sbzt }</td>
              <td>${sbgl.wxlxr }</td>
              <td>${sbgl.wxlxdh }</td>
              <td>${sbgl.mqsbcyr }</td>
              <td style="text-align:center">
                <a href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" onclick="console('update', '${user.userId}')"> 修改</a>
                <a href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" onclick="showRoles('${user.userId}')">| 查看</a>
              </td>
            </tr>
          </c:forEach>
        </tbody>

      </table>

    </div>
  </div>

    <!--分页-->
  <div style="clear:both; height:50px">
    <!--加载分页组件-->
    <div id="kkpager"></div>
    <script type="text/javascript">
      var param = "";

      $(function() {
        var totalPage = "${resultMap.totalPage}";
        var totalRecords = "${resultMap.totalNum}";
        var pageSize = "${resultMap.pageSize}";

        var pageNum = parseInt("${resultMap.pageNum}") + 1;
        //初始化分页控件
        //有些参数是可选的,比如lang,若不传有默认值
        kkpager.init({
          pno: pageNum,
          //总页码
          total: "${resultMap.totalPage}",
          //总数据条数
          totalRecords: totalRecords,
          //链接前部
          hrefFormer: 'sbgl_list',
          //链接尾部
          hrefLatter: '',
          getLink: function(n) {
            return getInitParam() + "&pageNum=" + n + "&pageSize=" + pageSize;
          },
          lang: {
            prePageText: '上一页',
            nextPageText: '下一页',
            totalPageBeforeText: '共',
            totalPageAfterText: '页',
            totalRecordsAfterText: '条数据',
            gopageBeforeText: '转到',
            gopageButtonOkText: '确定',
            gopageAfterText: '页',
            buttonTipBeforeText: '第',
            buttonTipAfterText: '页'
          }
        });
        //生成
        kkpager.generPageHtml();

        $('#mykkpagerselect').val(pageSize);
      });

      function returnoption(pageSize) {
        window.location.href = getInitParam() + "&pageNum=1&pageSize=" + pageSize;
      }

      function getInitParam() {
        var serSbmc = $('#serSbmc').val();
        var serSblx = $('#serSblx').val();
        var serSssx = $('#serSssx').val();
        var serJdmc = $('#serJdmc').val();
        var serSbzt = $('#serSbzt').val();

        var attr = "?serSbmc=" + encodeURI(encodeURI(serSbmc))
            + "&serSblx=" + serSblx + "&serSssx=" + serSssx + "&serJdmc=" + serJdmc+ "&serSbzt=" + serSbzt;
        return "${ctx}/sbgl/sbgl_list" + attr;
      }
    </script>
    <!--分页结束-->
  </div>
  <!--分页end-->

</body>
</html>

3、Controller(看红色字体下面那个处理方法)

package com.jinhetech.yogurt.sbgl.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.annotation.Resource;

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.authz.annotation.RequiresRoles;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.view.RedirectView;

import com.jinhetech.yogurt.dictionary.crop.service.impl.CropServiceImpl;
import com.jinhetech.yogurt.func.entity.Func;
import com.jinhetech.yogurt.func.service.FuncService;
import com.jinhetech.yogurt.menu.entity.Menu;
import com.jinhetech.yogurt.menu.service.MenuService;
import com.jinhetech.yogurt.menu.util.MenuUtil;
import com.jinhetech.yogurt.organization.entity.OrgTable;
import com.jinhetech.yogurt.organization.service.OrgService;
import com.jinhetech.yogurt.organization.util.OrgUtil;
import com.jinhetech.yogurt.role.entity.Role;
import com.jinhetech.yogurt.role.service.RoleService;
import com.jinhetech.yogurt.sbgl.dao.SbglDao;
import com.jinhetech.yogurt.sbgl.entity.Sbgl;
import com.jinhetech.yogurt.sbgl.service.SbglService;
import com.jinhetech.yogurt.sbgl.util.SbglUtil;
import com.jinhetech.yogurt.user.entity.User;
import com.jinhetech.yogurt.user.entity.UserInfo;
import com.jinhetech.yogurt.user.service.UserService;
import com.jinhetech.yogurt.user.util.UserUtil;
import com.jinhetech.yogurt.util.base.BaseController;
import com.jinhetech.yogurt.util.base.Constants;
import com.jinhetech.yogurt.util.common.TextUtils;
import com.jinhetech.yogurt.util.common.UUIDHexGenerator;

/**
 * 系统用户管理控制类
 *
 * @author Wang Hao
 * @version 1.0 2014-02-28 初版
 */
@Controller("sbglController")
@RequestMapping("/sbgl")
public class SbglController extends BaseController {
//  @Resource(name = "sbglDao")
//  private SbglDao sbglDao;

  @Resource(name = "sbglService")
  private SbglService sbglService;

  /**
   * 平台权限管理导航*/
  @RequestMapping("/home_list")
  public ModelAndView home() {

    return new ModelAndView("iot/permis/permis_home");
  }

  /**
   * 查询设备信息列表(支持分页和多条件查询)。
   *
   */
  @RequestMapping("sbgl_list")
  @RequiresRoles("sbgl/sbgl_list")
  public String getUserList(Model model) throws Exception {
    //显示设备列表
//    List<Sbgl> lst=new ArrayList<Sbgl>();
//    lst=(List<Sbgl>) sbglService.getAll();

    Map<String, Object> resultMap = null;
    // 查询表单或分页保持请求时 请求参数的接收
    Map<String, String> serArgs = new HashMap<String, String>();
    serArgs = SbglUtil.getSelArgsToMap(request);//这个类在下面给出

    resultMap = sbglService.getUserBySearch(serArgs, "wxlxdh");

    model.addAttribute("resultMap", resultMap);
//    model.addAttribute("lst", lst);

    return "sbgl/sbgl_list";
  }

  /**
   * 新增设备信息列表(支持分页和多条件查询)。
   *
   * @author YangZhenghua 2014-5-28
   * @throws Exception
   */
  @RequestMapping("sbgl_add_list")
  @RequiresRoles("sbgl/sbgl_add_list")
  public String getAddList(Model model) throws Exception {

    System.out.println("aaa");
    model.addAttribute("aaa","aaa");
    model.addAttribute("resultMap", "hello world");

    return "sbgl/sbgl_add_list";
  }

  /**
   * 保存、修改用户信息。
   *
   * @author YangZhenghua 2014-5-28
   * @throws Exception
   */
  @RequestMapping("sbgl_save_list")
  @RequiresRoles("sbgl/sbgl_save_list")
  public ModelAndView SaveSbgl(Sbgl sbgl) throws Exception {

    String sbmc=request.getParameter("sbmc");
    String sblx=request.getParameter("sblx");
    String sssx=request.getParameter("sssx");
    String ssjd=request.getParameter("ssjd");
    String azsj=request.getParameter("azsj");

    String azry=request.getParameter("azry");
    String sbzt=request.getParameter("sbzt");
    String sbjd=request.getParameter("sbjd");
    String sbwd=request.getParameter("sbwd");
    String wxlxr=request.getParameter("wxlxr");

    String wxlxdh=request.getParameter("wxlxdh");
    String sbywxcs=request.getParameter("sbywxcs");
    String jzpylyz=request.getParameter("jzpylyz");
    String mqsbcyr=request.getParameter("mqsbcyr");
    String bzsm=request.getParameter("bzsm");

    sbgl.setSbbm(UUIDHexGenerator.generate());
    sbgl.setSbmc(sbmc);
    sbgl.setSblx(sblx);
    sbgl.setSssx(sssx);
    sbgl.setSsjd(ssjd);
    sbgl.setAzsj(azsj);

    sbgl.setAzry(azry);
    sbgl.setSbzt(sbzt);
    sbgl.setSbjd(sbjd);
    sbgl.setSbwd(sbwd);
    sbgl.setWxlxr(wxlxr);

    sbgl.setWxlxdh(wxlxdh);
    sbgl.setSbywxcs(sbywxcs);
    sbgl.setJzpylyz(jzpylyz);
    sbgl.setMqsbcyr(mqsbcyr);
    sbgl.setBzsm(bzsm);

    sbglService.save(sbgl);

    return new ModelAndView(new RedirectView("sbgl_list"));
  }

}

3.2、SbglUtil.java

封装从前台传递过来的查询参数、前台传递过来的分页参数,都放到Map集合serArgs中

package com.jinhetech.yogurt.sbgl.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import com.jinhetech.yogurt.organization.entity.OrgTable;
import com.jinhetech.yogurt.report.entity.Report;
import com.jinhetech.yogurt.role.entity.Role;
import com.jinhetech.yogurt.user.entity.User;
import com.jinhetech.yogurt.user.entity.UserInfo;
import com.jinhetech.yogurt.util.common.JSONUtils;
import com.jinhetech.yogurt.util.common.TextUtils;

/**
 * 用户功能模块工具类。
 *
 * @author YangZhenghua
 * @version V1.0 2014-5-16 初版
 *
 */
public class SbglUtil {

  /**
   * 封装从前台传递过来的查询参数。
   *
   * @author YangZhenghua
   * @date 2014-6-26
   */
  public static Map<String, String> getSelArgsToMap(HttpServletRequest request) throws Exception {
    Map<String, String> serArgs = new HashMap<String, String>();

    String serSbmc = request.getParameter("serSbmc");
    String serSblx = request.getParameter("serSblx");
    String serSssx = request.getParameter("serSssx");
    String serJdmc = request.getParameter("serJdmc");
    String serSbzt = request.getParameter("serSbzt");

    String pageNum = request.getParameter("pageNum") == null ? "1" : request.getParameter("pageNum");
    String pageSize = request.getParameter("pageSize") == null ? "10" : request.getParameter("pageSize");

    //serArgs.put("serUserName", java.net.URLDecoder.decode(serUserName == null ? "" : serUserName, "UTF-8"));
    serArgs.put("serSbmc", serSbmc);
    serArgs.put("serSblx", serSblx);
    serArgs.put("serSssx", serSssx);
    serArgs.put("serJdmc", serJdmc);
    serArgs.put("serSbzt", serSbzt);

    serArgs.put("pageNum", pageNum);
    serArgs.put("pageSize", pageSize);

    return serArgs;
  }

}

3.3、SbglService.java

package com.jinhetech.yogurt.sbgl.service;

import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.jinhetech.yogurt.sbgl.entity.Sbgl;

public interface SbglService {

  public List<Sbgl> getAll() throws Exception;

  public Sbgl save(Sbgl sbgl) throws Exception;

  public Map<String, Object> getUserBySearch(Map<String, String> serArgs, final String sortType) throws Exception;

}

3.4、SbglServiceImpl.java (根据前台传递来的查询参数进行查询,获得的结果数据放到Page objPage参数)

package com.jinhetech.yogurt.sbgl.service.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.JoinType;
import javax.persistence.criteria.ListJoin;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.jinhetech.yogurt.role.entity.Role;
import com.jinhetech.yogurt.sbgl.dao.SbglDao;
import com.jinhetech.yogurt.sbgl.entity.Sbgl;
import com.jinhetech.yogurt.sbgl.service.SbglService;
import com.jinhetech.yogurt.user.entity.UserInfo;
import com.jinhetech.yogurt.util.common.PageUtils;
import com.jinhetech.yogurt.util.common.TextUtils;

@Service("sbglService")
@Transactional
public class SbglServiceImpl implements SbglService{

  @Resource(name = "sbglDao")
  private SbglDao sbglDao;

  public List<Sbgl> getAll() throws Exception{

    return (List<Sbgl>) this.sbglDao.findAll();
  }

  public Sbgl save(Sbgl sbgl) throws Exception {
    return sbglDao.save(sbgl);
  }

  /**
   * 查询用户信息列表(支持分页和多条件查询)。
   *
   * @author YangZhenghua 2014-6-19
   */
  public Map<String, Object> getUserBySearch(final Map<String, String> serArgs, final String sortType) throws Exception {

    // 获得分页对象pageable,并且在pageable中页码是从0开始,设定按照sortType升序排列
    Pageable pageable = PageUtils.buildPageRequest(Integer.valueOf(serArgs.get("pageNum")),
        Integer.valueOf(serArgs.get("pageSize")), sortType);

    Page<Sbgl> objPage = sbglDao.findAll(new Specification<Sbgl>() {

      public Predicate toPredicate(Root<Sbgl> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
        List<Predicate> lstPredicates = new ArrayList<Predicate>();

        if (TextUtils.isNotBlank(serArgs.get("serSbmc"))) {
          lstPredicates.add(cb.like(root.get("sbmc").as(String.class), "%" + serArgs.get("serSbmc") + "%"));
        }
        if (TextUtils.isNotBlank(serArgs.get("serSblx"))) {
          lstPredicates.add(cb.like(root.get("sblx").as(String.class), "%" + serArgs.get("serSblx") + "%"));
        }
        if (TextUtils.isNotBlank(serArgs.get("serSssx"))) {
          lstPredicates.add(cb.like(root.get("sssx").as(String.class), "%" + serArgs.get("serSssx") + "%"));
        }
        if (TextUtils.isNotBlank(serArgs.get("serJdmc"))) {
          lstPredicates.add(cb.like(root.get("jdmc").as(String.class), "%" + serArgs.get("serJdmc") + "%"));
        }

        if (TextUtils.isNotBlank(serArgs.get("serSbzt"))) {
          lstPredicates.add(cb.equal(root.get("sbzt"), serArgs.get("serSbzt")));
        }

        Predicate[] arrayPredicates = new Predicate[lstPredicates.size()];
        return cb.and(lstPredicates.toArray(arrayPredicates));
      }
    }, pageable);

    return PageUtils.getPageMap(objPage);
  }

}

3.4.1、PageUtils.java(分页数据工具类)

package com.jinhetech.yogurt.util.common;

import java.util.HashMap;
import java.util.Map;

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;

import com.jinhetech.yogurt.util.base.Constants;

/**
 * 分页数据工具类。
 *
 * @author YangZhenghua
 * @version V1.0 2014-6-24 初版
 *
 */
public class PageUtils {

  /**
   * 封装分页数据到Map中。
   */
  public static Map<String, Object> getPageMap(Page<?> objPage) {
    Map<String, Object> resultMap = new HashMap<String, Object>();

    resultMap.put(Constants.PAGE_RESULT_LIST, objPage.getContent()); // 数据集合
    resultMap.put(Constants.PAGE_TOTAL_NUM, objPage.getTotalElements()); // 总记录数
    resultMap.put(Constants.PAGE_TOTAL_PAGE, objPage.getTotalPages()); // 总页数
    resultMap.put(Constants.PAGE_NUM, objPage.getNumber()); // 当前页码
    resultMap.put(Constants.PAGE_SIZE, objPage.getSize()); // 每页显示数量

    return resultMap;
  }

  /**
   * 创建分页请求。
   *
   * @author YangZhenghua
   * @date 2014-7-14
   *
   * @param pageNum 当前页
   * @param pageSize 每页条数
   * @param sortType 排序字段
   * @param direction 排序方向
   */
  public static PageRequest buildPageRequest(int pageNum, int pageSize, String sortType, String direction) {
    Sort sort = null;

    if (!TextUtils.isNotBlank(sortType)) {
      return new PageRequest(pageNum - 1, pageSize);
    } else if (TextUtils.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);
  }

  /**
   * 创建分页请求
   *
   * @author YangZhenghua
   * @date 2014-11-12
   *
   * @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);
  }

}

4、DAO(SbglDao.java),对,只需要继承Spring Data JPA的PagingAndSortingRepository接口,Controller中调用其findAll()方法

package com.jinhetech.yogurt.sbgl.dao;

import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;

import com.jinhetech.yogurt.sbgl.entity.Sbgl;
import com.jinhetech.yogurt.user.entity.UserInfo;

@Repository("sbglDao")
public interface SbglDao extends PagingAndSortingRepository<Sbgl, String>, JpaSpecificationExecutor<Sbgl> {

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2017-10-25

基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询

前言 基于SpringMVC+Bootstrap+DataTables实现数据表格服务端分页.模糊查询(非DataTables Search),页面异步刷新. 说明:sp:message标签是使用了SpringMVC国际化 效果 DataTable表格 关键字查询 自定义关键字查询,非DataTable Search 代码 HTML代码 查询条件代码 <!-- 查询.添加.批量删除.导出.刷新 --> <div class="row-fluid"> <di

springmvc 分页查询的简单实现示例代码

目前较常用的分页实现办法有两种: 1.每次翻页都修改SQL,向SQL传入相关参数去数据库实时查出该页的数据并显示. 2.查出数据库某张表的全部数据,再通过在业务逻辑里面进行处理去取得某些数据并显示. 对于数据量并不大的简单的管理系统而言,第一种实现方法相对来说容易使用较少的代码实现分页这一功能,本文也正是为大家介绍这种方法: 代码片段: 1,Page.java package com.cm.contract.common; import org.apache.commons.lang.Strin

Spring Data JPA实现分页Pageable的实例代码

在JPA中提供了很方便的分页功能,那就是Pageable(org.springframework.data.domain.Pageable)以及它的实现类PageRequest(org.springframework.data.domain.PageRequest),详细的可以见示例代码. 1.改变CustomerRepository方法​ /** * 一个参数,匹配两个字段 * @param name2 * @Param pageable 分页参数 * @return * 这里Param的值和

spring data jpa分页查询示例代码

最近项目上用就hibernate+spring data jpa,一开始感觉还不错,但是随着对业务的复杂,要求处理一些复杂的sql,就顺便研究了下,把结果记录下,以便日后查看.用到Specification,需要继承JpaSpecificationExecutor接口.(下面代码有的分页从0开始作为第一页,有的从1开始作为作为第一页,我也忘记,请自己测试) DAO层: import java.util.List; import org.springframework.data.domain.Pa

struts2+spring+hibernate分页代码[比较多]第1/7页

dao层接口: Java代码 复制代码 代码如下: package com.last999.im.news.dao; import java.util.*; import com.last999.im.news.entity.KindEntity; import com.last999.im.news.web.PageTool; public interface KindEntityDao{ public KindEntity get(String uuid); public void save

SpringMvc+Mybatis+Pagehelper分页详解

最近公司需要做一个告警页面的功能,需要分页,查了很多资料发现PageHelper比较合适 故写一篇从零开始的PageHelper使用的教程,也记录下忙活一天的东西 1.首先需要在项目中添加PageHelper的依赖,这里我用的Maven添加 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>

springboot用thymeleaf模板的paginate分页完整代码

本文根据一个简单的user表为例,展示 springboot集成mybatis,再到前端分页完整代码(新手自学,不足之处欢迎纠正): 先看java部分 pom.xml 加入 <!--支持 Web 应用开发,包含 Tomcat 和 spring-mvc. --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web&l

Spring Data JPA 复杂/多条件组合分页查询

话不多说,请看代码: public Map<String, Object> getWeeklyBySearch(final Map<String, String> serArgs, String pageNum, String pageSize) throws Exception { // TODO Auto-generated method stub Map<String,Object> resultMap=new HashMap<String, Object&

SpringBoot JPA实现增删改查、分页、排序、事务操作等功能示例

今天给大家介绍一下SpringBoot中JPA的一些常用操作,例如:增删改查.分页.排序.事务操作等功能. 下面先来介绍一下JPA中一些常用的查询操作: //And --- 等价于 SQL 中的 and 关键字,比如 findByHeightAndSex(int height,char sex): public List<User> findByHeightAndSex(int height,char sex); // Or --- 等价于 SQL 中的 or 关键字,比如 findByHei

Java简单实现SpringMVC+MyBatis分页插件

1.封装分页Page类 package com.framework.common.page.impl; import java.io.Serializable; import com.framework.common.page.IPage; /** * * * */ public abstract class BasePage implements IPage, Serializable { /** * */ private static final long serialVersionUID

mybatis分页插件pageHelper详解及简单实例

mybatis分页插件pageHelper详解及简单实例 工作的框架spring springmvc mybatis3 首先使用分页插件必须先引入maven依赖,在pom.xml中添加如下 <!-- 分页助手 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>3.7.5

Mybatis分页插件的实例详解

Mybatis分页插件的实例详解 1.前言: 我们知道,在MySQL中,分页的sql是使用limit来做,如果我们自己写sql,那分页肯定是没有任何问题的.但是一旦model多了起来,复杂了起来,我们很自然的想到使用mybatis的逆向工程来生成相应的po和mapper,但是同时也会带来弊端,比如这里的分页问题就不好解决了. 可能有人会说,我可以修改生成的文件,没错,这是可行的,但是一般我们通过逆向工程生成的文件,都不会去动它,所以这个时候,就需要使用分页插件来解决了. 如果你也在用Mybati

自己动手写的mybatis分页插件(极其简单好用)

刚开始项目,需要用到mybatis分页,网上看了很多插件,其实实现原理基本都大同小异,但是大部分都只给了代码,注释不全,所以参考了很多篇文章(每篇文章偷一点代码,评出来自己的,半抄袭),才自己模仿着写出了一个适合自己项目的分页插件,话不多说,直接上代码,相比大部分文章,注释算很完整了 最重要的拦截器 package com.dnkx.interceptor; import java.sql.*; import java.util.HashMap; import java.util.Propert

SpringMVC+MyBatis分页(最新)

目前主流的Web MVC框架,除了Struts这个主力 外,还有Spring MVC,主要是由于Spring MVC配置比较简单,使用起来也十分明了,非常灵活,与Spring 集成较好,对RESTful API的支持也比struts要好. MyBatis是ibatis的升级版,作为hibernate的老对手,它 是一个可以自定义SQL.存储过程和高级映射的持久层框架. 与hibernate的主要区别就是mybatis是半自动化的,而hibernate是全自动的,所以当应用需求越来越复杂的时候,自

Mybatis分页插件PageHelper的使用详解

1.说明 如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件. 该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页. 2.使用方法 第一步:在Mybatis配置xml中配置拦截器插件: <plugins> <!-- com.github.pagehelper为PageHelper类所在包名 --> <plugin interceptor="com.github.pageh

详解Mybatis分页插件 - 示例代码

这里说最好用,绝对不是吹的,不过有好多人都不理解为什么要用这个插件,自己手写分页sql不是挺好吗...... 所以我特地写这样一个例子来讲为什么最好用. 假设我们已经写好了Mapper的接口和xml,如下: public interface SysLoginLogMapper { /** * 根据查询条件查询登录日志 * @param logip * @param username * @param loginDate * @param exitDate * @return */ List<Sy

Spring mvc整合mybatis(crud+分页插件)操作mysql

一.web.xml配置 我们都知道java ee的项目启动的第一件事就是读取web.xml,spring mvc 的web.xml我在上一篇文章中也做了详细讲解,不懂的可以回头看看,讲解的这个项目源码我也会放到github上,也可以去那里看看,这里就不做介绍了. web.xml 配置 <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/c

详解Mybatis极其(最)简(好)单(用)的一个分页插件

注意:这篇博客已经和当前的分页插件完全不一样了,所以建议大家通过上面项目地址查看最新的源码和文档来了解. 以前为Mybatis分页查询发愁过,而且在网上搜过很多相关的文章,最后一个都没采用.在分页的地方完全都是手写分页SQL和count的sql,总之很麻烦. 后来有一段时间想从Mybatis内部写一个分页的实现,我对LanguageDriver写过一个实现,自动分页是没问题了,但是查询总数(count)仍然没法一次性解决,最后不了了之. 最近又要用到分页,为了方便必须地写个通用的分页类,因此又再

Mybatis常用分页插件实现快速分页处理技巧

在未分享整个查询分页的执行代码之前,先了解一下执行流程. 1.总体上是利用mybatis的插件拦截器,在sql执行之前拦截,为查询语句加上limit X X 2.用一个Page对象,贯穿整个执行流程,这个Page对象需要用Java编写前端分页组件 3.用一套比较完整的三层entity,dao,service支持这个分页架构 4.这个分页用到的一些辅助类 注:分享的内容较多,这边的话我就不把需要的jar一一列举,大家使用这个分页功能的时候缺少什么就去晚上找什么jar包即可,尽可能用maven包导入