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

网友投稿 316 2022-11-27


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 findPageObjects(

@Param("username")String username,

@Param("startIndex")Integer startIndex,

@Param("pageSize")Integer pageSize

);

}

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

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

&lUzTCmt;!-- sql元素用于对于sql语句共性的提取,需要的位置用引入 -->

from sys_Logs

username like concat('%',#{username},'%')

select count(*)

select *

order by createdTime desc

limit #{startIndex},#{pageSize}

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 参数化的类型(泛型)

*/

@Data

public class PageObject {//类名<泛型>:类泛型(这里的泛型用于约束类中的属性,方法参数,方法的返回值)

/**当前页的页码值 */

private Integer pageCurrent=1;

/**页面大小*/

private Integer pageSize=3;

/**总行数(通过查询获得)*/

private Integer rowCount=0;

/**总页数(通过计算获得)*/

private Integer pageCount=0;

/**当前页记录*/

private List 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 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 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 records = sysLogDao.findPageObjects(username, startIndex, pageSize);

//4.对分页信息以及当前页记录进行封装

//4.1 构建PageObject对象

PageObject 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编写方法

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

~~~~

总结


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

上一篇:Netty粘包拆包问题解决方案
下一篇:springboot项目idea热部署的教程详解
相关文章

 发表评论

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