spring Boot查询数据分页显示的方法实例

springBoot所有依赖和配置文件都写好的情况下

1、dao接口的实现方法

package com.cy.pj.sys.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.cy.pj.sys.pojo.SysLog;
@Mapper
public interface SysLogDao {
/**
 *
 * @param username 查询条件(例如查询那个用户的日志信息)
 * @return 总记录数(基于这个结果可以计算总页数)
 */
 int getRowCount(@Param("username") String username);
 /**
  *
  * @param username 查询条件(例如查询那个用户的日志信息)
  * @param startIndex 当前页的起始位置
  * @param paInteger 当前页的页面大小
  * @return 当前页的日志记录信息
  * 数据库中每条日志信息封装到一个SysLog对象中
  */
 List<SysLog> findPageObjects(
   @Param("username")String username,
   @Param("startIndex")Integer startIndex,
   @Param("pageSize")Integer pageSize
   );
}

2、写实现dao中Mapper的sql语句

<?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="com.cy.pj.sys.dao.SysLogDao">
<!-- sql元素用于对于sql语句共性的提取,需要的位置用<include>引入 -->
 <sql id="queryWhereId">
  from sys_Logs
  <where>
   <if test="username!=null and username!=''">
    username like concat('%',#{username},'%')
    <!-- concat 字符串的连接 -->
   </if>
  </where>
 </sql>
 <!-- 按条件统计记录总数 -->
 <select id="getRowCount" resultType="int">
 select count(*)
 <include refid="queryWhereId"/>
 </select>
 <!-- 在映射文件中添加为id为 findPageObjects元素,,实现分页查询-->
 <select id="findPageObjects" resultType="com.cy.pj.sys.pojo.SysLog">
 select *
 <include refid="queryWhereId"/>
 order by createdTime desc
 limit #{startIndex},#{pageSize}
 </select>
</mapper>

3、写pojo类对数据进行封装,所显示的表字段的pojo类

3.1这里是SysLog

package com.cy.pj.sys.pojo;
import java.io.Serializable;
import java.util.Date;

import lombok.Data;
/**
 * 定义用于封装日志信息的一个pojo对象,这样的对象,在定义时要遵循一下规则
 * 1)属性尽量都用对象类型
 * 2)提供无参数构造函数
 * 3)提供set/get方法,boolean类型变量不能以is作为前缀
 * 4)实现序列化接口并手动添加序列化id(便于后续对此对象进行序列化):在java中建议所有用于存储数据 的对象都实现
 * FAQ?
 * 1)为什么要实现序列化接口
 * 2)什么是序列化?(将对象转化为字节)
 * 3)为什么要序列化?应用在什么场景?(将数据持久化,或将数据存储到缓存中)
 * 4)什么是反序列化?(将字节转换为对象
 * 5)如何序列化和反序列化
 * 5.1)设计类是要实现序列化接口
 * 5.2)构建IO对象(ObjectOutputStream/ObjectinputStream)
 * 5.3)通过I/O对象进行序列化和反序列化
 * @author Administrator
 *
 */
@Data
public class SysLog implements Serializable{

 private static final long serialVersionUID = -1592163223057343412L;
private Integer id;
//用户名
private String username;
//用户操作
private String operation;
//请求方法
private String method;
//请求参数
private String params;
//执行时长(毫秒)
private Long time;
//ip地址
private String ip;
//创建时间
private Date createdTime;
}

3.2对获取的信息进行封装(获取分页信息的页码值、页面大小(就是每页所显示的记录)、获取的表总共记录数、总页数 、当前记录)

package com.cy.pj.sys.pojo;

import java.util.List;

import lombok.Data;
/**
 *
 * @author PageObject 为业务封装分业务相关数据的BO对象
 * @param <T>参数化的类型(泛型)
 */
@Data
public class PageObject<T> {//类名<泛型>:类泛型(这里的泛型用于约束类中的属性,方法参数,方法的返回值)
 /**当前页的页码值 */
 private Integer pageCurrent=1;
  /**页面大小*/
 private Integer pageSize=3;
  /**总行数(通过查询获得)*/

 private Integer rowCount=0;
 /**总页数(通过计算获得)*/

 private Integer pageCount=0;
 /**当前页记录*/
  private List<T> records;

}

3.3处理异常进行封装

package com.cy.pj.sys.pojo;

public class JsonResult {
 /**
  * 状态码
  */
private int state=1;
/**
 * 状态信息
 */
private String message="ok";
/**
 * 正确数据
 */
private Object data;
public JsonResult() {
}
public JsonResult(String message) {
 this.message = message;

}
public JsonResult(Object data) {
 this.data = data;
}
public JsonResult(Throwable t) {
 this.state=0;
 this.message=t.getMessage();

}
public int getState() {
 return state;
}
public void setState(int state) {
 this.state = state;
}
public String getMessage() {
 return message;
}
public void setMessage(String message) {
 this.message = message;
}
public Object getData() {
 return data;
}
public void setData(Object data) {
 this.data = data;
}

}

4、写service接口

package com.cy.pj.sys.service;

import com.cy.pj.sys.pojo.PageObject;
import com.cy.pj.sys.pojo.SysLog;

public interface SysLogService {
 PageObject<SysLog> findPageObject(String username,Integer pageCurrent);
}

5、写实现service接口的实现类

package com.cy.pj.sys.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.cy.pj.sys.dao.SysLogDao;
import com.cy.pj.sys.pojo.PageObject;
import com.cy.pj.sys.pojo.SysLog;
import com.cy.pj.sys.service.SysLogService;

import om.cy.pj.common.exception.ServiceException;
@Service
public class SysLogServiceImpl implements SysLogService {
 @Autowired
 private SysLogDao sysLogDao;

 @Override
 public PageObject<SysLog> findPageObject(String username, Integer pageCurrent) {
  // 1.验证参数的合法性
  // 1.1验证pageCurrent的合法性
  // 不合法抛出IllegalArgumentException异常
  if (pageCurrent == null || pageCurrent < 1)
   throw new IllegalArgumentException("当前也显示不正确");
  // 基于条件查询总记录数
  // 2.1执行查询
  int rowCount = sysLogDao.getRowCount(username);
  // 2.2验证查询结果,假如结果为0不在执行如下操作
  if (rowCount == 0)

   throw new ServiceException("系统登录没有查到对应的记录");
  // 3.基于条件查询当前页记录(pageSize定义为2)
  // 3.1)定义pageSize
  int pageSize = 2;
  //3.2计算startIndex
  int startIndex=(pageCurrent-1)*pageSize;
  //3.3执行当前数据的查询操作
  List<SysLog> records = sysLogDao.findPageObjects(username, startIndex, pageSize);
  //4.对分页信息以及当前页记录进行封装
  //4.1 构建PageObject对象
  PageObject<SysLog> pageObject = new PageObject<>();
  //4.2封装数据
   pageObject.setPageCurrent(pageCurrent);
   pageObject.setPageSize(pageSize);
   pageObject.setRowCount(rowCount);
   pageObject.setRecords(records);
   pageObject.setPageCount((rowCount-1)/pageSize+1);
   //5.返回封装结果
  return pageObject;
 }

}

5.自定义异常

package om.cy.pj.common.exception;

public class ServiceException extends RuntimeException {
public ServiceException() {
 super();
}

public ServiceException(String message) {
 super(message);
}
public ServiceException(Throwable cause) {
 super(cause);
}
}

controller类

package om.cy.pj.common.exception;

public class ServiceException extends RuntimeException {
public ServiceException() {
 super();
}

public ServiceException(String message) {
 super(message);
}
public ServiceException(Throwable cause) {
 super(cause);
}
}

html页面和js写的方法

数据显示页面的js编写方法

<div id="pageId" class="box-footer clearfix" dm="100"></div>
   <!-- /.box-body -->
  </div>
  <!-- /.box -->
 </div>
</div>
<script type="text/javascript">
/* 分页页面加载完成,向服务端发起异步请求 */
 $(function() {
  $("#pageId").load("doPageUI",function(){
   doGetObjects();
  });
 });

 /* 定义异步请求处理函数, */
 function doGetObjects(){
  //1.定义url和参数
  var url = "doFindPageObjects";
  var params={"pageCurrent":1};
  //2.发起异步请求
   //请问如下ajax请求的回调函数参数名可以是任意吗?//可以,必须符合标识符的规范
  $.getJSON(url,params,function(result){

   doHandleQueryResponseResult(result);
  });//特殊的ajax函数
 }
 function doHandleQueryResponseResult(result){
  if(result.state==1){//ok
   //更新table中tbody内部的数据
   doSetTableBodyRows(result.data.records);//将数据呈现在页面上
   /*
   //更新页面page。html分页数据
   */
   doSetPagination(result.data);
  }else{
   alert(result.message);
  }
 }

 function doSetTableBodyRows(records){
  //1.获取tBody对象,并清除对象
  var tBody=$("#tbodyId");
  tBody.empty();
  //2.迭代records记录,并将其内容追加到tbody
  for(var i in records){
   //2.1构建tr对象
   var tr=$("<tr></tr>");
   //2.2构建tds对象
   var tds=doCreateTds(records[i]);
   //2.3将tds追加到tr中
   tr.append(tds);
   //2.4将tr追加tbody中
   tBody.append(tr);
  }
 }
 function doCreateTds(data){
  var tds="<td><input type='checkbox' class='cBox' name='cItem' value='"+data.id+"'></td>"
  +"<td>"+data.username+"</td>"
  +"<td>"+data.operation+"</td>"
  +"<td>"+data.method+"</td>"
  +"<td>"+data.params+"</td>"
  +"<td>"+data.ip+"</td>"
  +"<td>"+data.time+"</td>";
  return tds;
 }

</script>

创建上下页翻页的按钮HTML页 以及js的编写

<ul class="pagination pagination-sm no-margin pull-right">
 <li><a class="first">首页</a></li>
 <li><a class="pre">上一页</a></li>
 <li><a class="next">下一页</a></li>
 <li><a class="last">尾页</a></li>
 <li><a class="rowCount">总记录数(0)</a></li>
 <li><a class="pageCount">总页数(0)</a></li>
 <li><a class="pageCurrent">当前页(0)</a></li>
</ul>
<script type="text/javascript">
 function doSetPagination(page){
  console.log("page",page)
  //1.初始化数据
  $(".rowCount").html("总记录数("+page.rowCount+")");
  $(".pageCount").html("总页数("+page.pageCount+")");
  $(".pageCurrent").html("当前页("+page.pageCurrent+")");
 //2.绑定数据(为后续对此数据的使用提供服务)
 $("#pageId").data("pageCurrent",page.pageCurrent);
 $("#pageId").data("pageCount",page.pageCount);
 }
 $(function(){
  //事件注册
 $("#pageId").on("click",".first,.pre,.next,.last",doJumpToPage);
 })
 function doJumpToPage(){
  //1.获取点击对象的clss值
  var cls=$(this).prop("class");//Property
  //2.基于点击的对象执行pageCurrent值得修改
  //2.1获取pageCurrent, pageCount的当前值
   var pageCurrent=$("#pageId").data("pageCurrent");
   var pageCount=$("#pageId").data("pageCount");
   //2.2修改pageCurrent的值
   if(cls=="first"){//首页
    pageCurrent=1;
   }else if(cls=="pre"&&pageCurrent>1){//上一页
    pageCurrent--;
   }else if(cls=="next"&&pageCurrent<pageCount){//下一页
    pageCurrent++;
   }else if(cls=="last"){//最后一页
    pageCurrent=pageCount;
   }else{
    return;
 }
   //3.对pageCurrent值进行重新绑定
   $("#pageId").data("pageCurrent",pageCurrent);
   //4.基于新的pageCurrent的值进行当前页数据查询
   doGetObjects();
 }
  function doGetObjects(){
  //1.定义url和参数
  var url ="doFindPageObjects";
  //data是从指定元素上获取绑定的数据
  //数据会在何时进行绑定?(setPagination,doQueryObjects)
  var pageCurrent = $("#pageId").data("pageCurrent");
  //为什么要执行如下判断,然后初始化pageCurrent的值为1
  //pageCurrent参数在没有赋值的情况下,默认初始值应该为1.
  if(!pageCurrent)
   pageCurrent=1;
  var params={"pageCurrent":pageCurrent};
  //2.发起异步请求
  //请问如下ajax请求的回调函数参数名可以是任意的吗??可以,必须符合标识符的规范
  $.getJSON(url,params,function(result){
   //请问result是一个字符串还是json格式的js对象? 答:json格式对象
   doHandleQueryResponseResult(result);

  });
 }//特殊的ajax函数

</script>~~~~

总结

到此这篇关于spring Boot查询数据分页显示的文章就介绍到这了,更多相关springBoot查询数据分页内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 在Spring Boot中使用Spring-data-jpa实现分页查询

    在我们平时的工作中,查询列表在我们的系统中基本随处可见,那么我们如何使用jpa进行多条件查询以及查询列表分页呢?下面我将介绍两种多条件查询方式. 1.引入起步依赖   <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency&

  • AJAX +SpringMVC 实现bootstrap模态框的分页查询功能

    一 .效果图 二.JS function getManagerList(dealerId,page2){ macAddress = document.getElementById("activeXDemo").getMac(); $.get("${ctxPath}/common/dealer/manager?"+Math.random(), { page2: page2, pageSize2: 9, dealerId: dealerId, macAddress:ma

  • springboot+mongodb 实现按日期分组分页查询功能

    具体代码如下所示: WalletDetailsResp walletDetailsResp = new WalletDetailsResp(); List<WalletDetailsResp.WalletDetail> list = new ArrayList<>(); WalletDetailsResp.PageInfoBean pageInfoBean = new WalletDetailsResp.PageInfoBean(); List<Integer> typ

  • SpringBoot Jpa分页查询配置方式解析

    这篇文章主要介绍了SpringBoot Jpa分页查询配置方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 这是已经被废弃的接口 Sort sort = new Sort(Sort.Direction.DESC,"bean类中字段"); //创建时间降序排序 Pageable pageable = new PageRequest(pageNumber,pageSize,sort); 上面的用法在最新的SpringBoot中已经不

  • Spring Boot(五)之跨域、自定义查询及分页

    跨域 前面我们初步做出了一个可以实现受保护的 REST API,但是我们没有涉及一个前端领域很重要的问题,那就是跨域请求( cross-origin HTTP request ).先来回顾一些背景知识: 跨域请求 定义:当我们从本身站点请求不同域名或端口的服务所提供的资源时,就会发起跨域请求. 例如最常见的我们很多的 css 样式文件是会链接到某个公共 CDN 服务器上,而不是在本身的服务器上,这其实就是典型的一个跨域请求.但浏览器由于安全原因限制了在脚本( script )中发起的跨域 HTT

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

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

  • spring Boot查询数据分页显示的方法实例

    springBoot所有依赖和配置文件都写好的情况下 1.dao接口的实现方法 package com.cy.pj.sys.dao; import java.util.List; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import com.cy.pj.sys.pojo.SysLog; @Mapper public interface SysLogDao {

  • PHP实现数据分页显示的简单实例

    分页在后台管理中是经常使用的功能,分页显示方便大量数据的管理. 实例代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>用户列表</title> </head> <body> <?php $con = mysql_connect("localhost","root",

  • Spring Boot 2.0多数据源配置方法实例详解

    两个数据库实例,一个负责读,一个负责写. datasource-reader: type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://192.168.43.61:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false username: icbc password: icbc driver-class-na

  • jQuery基于xml格式数据实现模糊查询及分页功能的方法

    本文实例讲述了jQuery基于xml格式数据实现模糊查询及分页功能的方法.分享给大家供大家参考,具体如下: 1.此代码只支持xml 格式数据,根据不同需求修改ajax的success方法就ok了 2.此代码只是针对ajax只需一次请求的情况下 String.prototype.trim=function(){return this.replace(/(^\s*)|(\s*$)/g,"");};//解决ie trim问题 (function($) { /** * ============

  • Spring Boot中使用MongoDB数据库的方法

    MongoDB数据库简介 简介 MongoDB是一个高性能,开源,无模式的,基于分布式文件存储的文档型数据库,由C++语言编写,其名称来源取自"humongous",是一种开源的文档数据库──NoSql数据库的一种.NoSql,全称是 Not Only Sql,指的是非关系型的数据库. 特点 MongoDB数据库的特点是高性能.易部署.易使用,存储数据非常方便.主要功能特性有: * 面向集合存储,易存储对象类型的数据. * 模式自由. * 支持动态查询. * 支持完全索引,包含内部对象

  • Spring Boot 中使用cache缓存的方法

    一.什么是缓存 Cache Cache 一词最早来自于CPU设计 当CPU要读取一个数据时,首先从CPU缓存中查找,找到就立即读取并送给CPU处理:没有找到,就从速率相对较慢的内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存.正是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在CPU缓存中,只有大约10%需要从内存读取.这大大节省了CPU直接读取内存的

  • Spring Boot中使用JDBC Templet的方法教程

    前言 Spring 的 JDBC Templet 是 Spring 对 JDBC 使用的一个基本的封装.他主要是帮助程序员实现了数据库连接的管理,其余的使用方式和直接使用 JDBC 没有什么大的区别. 业务需求 JDBC 的使用大家都比较熟悉了.这里主要为了演示在 SpringBoot 中使用 Spring JDBC Templet 的步骤,所以我们就设计一个简单的需求.一个用户对象的 CURD 的操作.对象有两个属性,一个属性是id,一个属性是名称.存储在 MySQL 的 auth_user

  • PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例

    本文实例讲述了PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据.分享给大家供大家参考,具体如下: 主要功能是从postgreSql查询数据,并检索,由于自己刚开始接触,所以难点在于多条数据同时筛选并分页显示出来,写下自己的代码与大家共享. <html> <head> <script type="text/javascript"> /** * 分页函数 * pno--页数 * psize--每页显示记录数 * 分页部分是从真实数

  • Spring Boot实现数据访问计数器方案详解

    目录 1.数据访问计数器 2.代码实现 2.1.方案说明 2.2.代码 2.3.调用 1.数据访问计数器   在Spring Boot项目中,有时需要数据访问计数器.大致有下列三种情形: 1)纯计数:如登录的密码错误计数,超过门限N次,则表示计数器满,此时可进行下一步处理,如锁定该账户. 2)时间滑动窗口:设窗口宽度为T,如果窗口中尾帧时间与首帧时间差大于T,则表示计数器满.   例如使用redis缓存时,使用key查询redis中数据,如果有此key数据,则返回对象数据:如无此key数据,则查

  • Spring Boot集成MyBatis访问数据库的方法

    基于spring boot开发的微服务应用,与MyBatis如何集成? 集成方法 可行的方法有: 1.基于XML或者Java Config,构建必需的对象,配置MyBatis. 2.使用MyBatis官方提供的组件,实现MyBatis的集成. 方法一 建议参考如下文章,完成集成的验证. MyBatis学习 之 一.MyBatis简介与配置MyBatis+Spring+MySql 基于Spring + Spring MVC + Mybatis 高性能web构建 spring与mybatis三种整合

随机推荐