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执行当前数据的查询操作 List records=sysLogDao.findPageObjects(username,startIndex,pageSize); //4.对分页信息以及当前页记录进行封装 //4.1构建PageObject对象 PageObject pageObject=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编写方法