spring Boot查询数据分页显示的方法实例
springBoot所有依赖和配置文件都写好的情况下
1、dao接口的实现方法
packagecom.cy.pj.sys.dao;
importjava.util.List;
importorg.apache.ibatis.annotations.Mapper;
importorg.apache.ibatis.annotations.Param;
importcom.cy.pj.sys.pojo.SysLog;
@Mapper
publicinterfaceSysLogDao{
/**
*
*@paramusername查询条件(例如查询那个用户的日志信息)
*@return总记录数(基于这个结果可以计算总页数)
*/
intgetRowCount(@Param("username")Stringusername);
/**
*
*@paramusername查询条件(例如查询那个用户的日志信息)
*@paramstartIndex当前页的起始位置
*@parampaInteger当前页的页面大小
*@return当前页的日志记录信息
*数据库中每条日志信息封装到一个SysLog对象中
*/
ListfindPageObjects(
@Param("username")Stringusername,
@Param("startIndex")IntegerstartIndex,
@Param("pageSize")IntegerpageSize
);
}
2、写实现dao中Mapper的sql语句
fromsys_Logs usernamelikeconcat('%',#{username},'%') selectcount(*) select* orderbycreatedTimedesc limit#{startIndex},#{pageSize}
3、写pojo类对数据进行封装,所显示的表字段的pojo类
3.1这里是SysLog
packagecom.cy.pj.sys.pojo;
importjava.io.Serializable;
importjava.util.Date;
importlombok.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对象进行序列化和反序列化
*@authorAdministrator
*
*/
@Data
publicclassSysLogimplementsSerializable{
privatestaticfinallongserialVersionUID=-1592163223057343412L;
privateIntegerid;
//用户名
privateStringusername;
//用户操作
privateStringoperation;
//请求方法
privateStringmethod;
//请求参数
privateStringparams;
//执行时长(毫秒)
privateLongtime;
//ip地址
privateStringip;
//创建时间
privateDatecreatedTime;
}
3.2对获取的信息进行封装(获取分页信息的页码值、页面大小(就是每页所显示的记录)、获取的表总共记录数、总页数、当前记录)
packagecom.cy.pj.sys.pojo; importjava.util.List; importlombok.Data; /** * *@authorPageObject为业务封装分业务相关数据的BO对象 *@param参数化的类型(泛型) */ @Data publicclassPageObject {//类名<泛型>:类泛型(这里的泛型用于约束类中的属性,方法参数,方法的返回值) /**当前页的页码值*/ privateIntegerpageCurrent=1; /**页面大小*/ privateIntegerpageSize=3; /**总行数(通过查询获得)*/ privateIntegerrowCount=0; /**总页数(通过计算获得)*/ privateIntegerpageCount=0; /**当前页记录*/ privateList records; }
3.3处理异常进行封装
packagecom.cy.pj.sys.pojo;
publicclassJsonResult{
/**
*状态码
*/
privateintstate=1;
/**
*状态信息
*/
privateStringmessage="ok";
/**
*正确数据
*/
privateObjectdata;
publicJsonResult(){
}
publicJsonResult(Stringmessage){
this.message=message;
}
publicJsonResult(Objectdata){
this.data=data;
}
publicJsonResult(Throwablet){
this.state=0;
this.message=t.getMessage();
}
publicintgetState(){
returnstate;
}
publicvoidsetState(intstate){
this.state=state;
}
publicStringgetMessage(){
returnmessage;
}
publicvoidsetMessage(Stringmessage){
this.message=message;
}
publicObjectgetData(){
returndata;
}
publicvoidsetData(Objectdata){
this.data=data;
}
}
4、写service接口
packagecom.cy.pj.sys.service;
importcom.cy.pj.sys.pojo.PageObject;
importcom.cy.pj.sys.pojo.SysLog;
publicinterfaceSysLogService{
PageObjectfindPageObject(Stringusername,IntegerpageCurrent);
}
5、写实现service接口的实现类
packagecom.cy.pj.sys.service.impl;
importjava.util.List;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Service;
importcom.cy.pj.sys.dao.SysLogDao;
importcom.cy.pj.sys.pojo.PageObject;
importcom.cy.pj.sys.pojo.SysLog;
importcom.cy.pj.sys.service.SysLogService;
importom.cy.pj.common.exception.ServiceException;
@Service
publicclassSysLogServiceImplimplementsSysLogService{
@Autowired
privateSysLogDaosysLogDao;
@Override
publicPageObjectfindPageObject(Stringusername,IntegerpageCurrent){
//1.验证参数的合法性
//1.1验证pageCurrent的合法性
//不合法抛出IllegalArgumentException异常
if(pageCurrent==null||pageCurrent<1)
thrownewIllegalArgumentException("当前也显示不正确");
//基于条件查询总记录数
//2.1执行查询
introwCount=sysLogDao.getRowCount(username);
//2.2验证查询结果,假如结果为0不在执行如下操作
if(rowCount==0)
thrownewServiceException("系统登录没有查到对应的记录");
//3.基于条件查询当前页记录(pageSize定义为2)
//3.1)定义pageSize
intpageSize=2;
//3.2计算startIndex
intstartIndex=(pageCurrent-1)*pageSize;
//3.3执行当前数据的查询操作
Listrecords=sysLogDao.findPageObjects(username,startIndex,pageSize);
//4.对分页信息以及当前页记录进行封装
//4.1构建PageObject对象
PageObjectpageObject=newPageObject<>();
//4.2封装数据
pageObject.setPageCurrent(pageCurrent);
pageObject.setPageSize(pageSize);
pageObject.setRowCount(rowCount);
pageObject.setRecords(records);
pageObject.setPageCount((rowCount-1)/pageSize+1);
//5.返回封装结果
returnpageObject;
}
}
5.自定义异常
packageom.cy.pj.common.exception;
publicclassServiceExceptionextendsRuntimeException{
publicServiceException(){
super();
}
publicServiceException(Stringmessage){
super(message);
}
publicServiceException(Throwablecause){
super(cause);
}
}
controller类
packageom.cy.pj.common.exception;
publicclassServiceExceptionextendsRuntimeException{
publicServiceException(){
super();
}
publicServiceException(Stringmessage){
super(message);
}
publicServiceException(Throwablecause){
super(cause);
}
}
html页面和js写的方法
数据显示页面的js编写方法