规律和排序的不同
5312023-08-29
style="text-indent:2em;">大家好,thinkphp怎么实现分页排序相信很多的网友都不是很明白,包括动态分页排序怎么弄好看也是一样,不过没有关系,接下来就来为大家分享关于thinkphp怎么实现分页排序和动态分页排序怎么弄好看的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
本文目录
在这些控件里要达到分页的效果,一般都会传2个参数,第一个是表示当前页的索引(一般从0开始),第二个表示当前页展示多少条业务记录,然后将相应的参数传递给List<T>getList(PagenateArgsargs)方法,最终实现数据库中的分页时候可以使用limit关键词(针对mysql)进行分页,如果是oracle或者sqlserver他们都有自带的rownum函数可以使用。
针对上述思路,首先在demo.mybatis.model下面新建一个名为PagenateArgs的分页参数实体类与一个名为SortDirectionEnum的枚举类,里面包含当前页面索引pageIndex,当前页展示业务记录数pageSize,pageStart属性表示从第几条开始,(pageStart=pageIndex*pageSize)因为limit关键词用法是表示【limit起始条数(不包含),取几条】,orderFieldStr排序字段,orderDirectionStr排序方向,所以具体创建如下:
packagedavid.mybatis.model;/**分页参数实体类*/publicclassPagenateArgs{privateintpageIndex;privateintpageSize;privateintpageStart;privateStringorderFieldStr;privateStringorderDirectionStr;publicPagenateArgs(){//TODOAuto-generatedconstructorstub}publicPagenateArgs(intpageIndex,intpageSize,StringorderFieldStr,StringorderDirectionStr){this.pageIndex=pageIndex;this.pageSize=pageSize;this.orderFieldStr=orderFieldStr;this.orderDirectionStr=orderDirectionStr;pageStart=pageIndex*pageSize;}publicintgetPageIndex(){returnpageIndex;}publicintgetPageStart(){returnpageStart;}publicintgetPageSize(){returnpageSize;}publicStringorderFieldStr(){returnorderFieldStr;}publicStringgetOrderDirectionStr(){returnorderDirectionStr;}}
packagedavid.mybatis.model;/**排序枚举*/publicenumSortDirectionEnum{/**升序*/ASC,/**降序*/DESC}
完成上面的步骤以后在IVisitorOperation接口类中继续添加一个方法publicList<Visitor>getListByPagenate(PagenateArgsargs),这次的分页其实也就是在这个的基础上稍加改动即可,IVisitorOperation接口类改动后如下所示:
packagedavid.mybatis.demo;importjava.util.List;importdavid.mybatis.model.PagenateArgs;importdavid.mybatis.model.Visitor;importdavid.mybatis.model.VisitorWithRn;publicinterfaceIVisitorOperation{/**基础查询*/publicVisitorbasicQuery(intid);/**添加访问者*/publicintadd(Visitorvisitor);/**删除访问者*/publicintdelete(intid);/**更新访问者*/publicintupdate(Visitorvisitor);/**查询访问者*/publicVisitorquery(intid);/**查询List*/publicList<Visitor>getList();/**分页查询List*/publicList<Visitor>getListByPagenate(PagenateArgsargs);}
接下来改动VisitorMapper.xml配置文件了,新增一个<select>节点id与参数类型参照前几章的方式配置好,如下此处新增的id就为getListByPagenate,配置好以后如下
<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""
http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mappernamespace="david.mybatis.demo.IVisitorOperation"><!--useGeneratedKeys="true"代表是否使用自增长序列,keyProperty="Id"指定自增长列是哪一列,parameterType="Visitor"指定IVisitorOperation接口类中定义中所传的相应类型--><insertid="add"parameterType="Visitor"useGeneratedKeys="true"keyProperty="Id">insertintoVisitor(Name,Email,Status,CreateTime)values(#{name},#{email},#{status},#{createTime})</insert><deleteid="delete"parameterType="int">deletefromVisitorwherestatus>0andid=#{id}</delete><updateid="update"parameterType="Visitor">updateVisitorsetName=#{name},Email=#{email},Status=#{status}whereid=#{id}andStatus>0;</update><selectid="query"parameterType="int"resultType="Visitor">selectId,Name,Email,Status,CreateTimefromvisitorwhereid=#{id}andStatus>0orderbyId</select><selectid="basicQuery"parameterType="int"resultType="Visitor">select*fromvisitorwhereid=#{id}andStatus>0orderbyId</select><selectid="getList"resultMap="visitorRs"><includerefid="getListSql"/></select><sqlid="getListSql">select*fromVisitorwherestatus>0</sql><!--以下为新增部分用来分页,orderBySql这个提取出来是为了后面有示例复用--><resultMaptype="Visitor"id="visitorRs"><idcolumn="Id"property="id"/><resultcolumn="Name"property="name"/><resultcolumn="Email"property="email"/><resultcolumn="Status"property="status"/><resultcolumn="CreateTime"property="createTime"/></resultMap><selectid="getListByPagenate"parameterType="PagenateArgs"resultType="Visitor">select*from(<includerefid="getListSql"/><includerefid="orderBySql"/>)t<!--#{}表示参数化输出,${}表示直接输出不进行任何转义操作,自己进行转移--><iftest="pageStart>-1andpageSize>-1">limit#{pageStart},#{pageSize}</if></select><sqlid="orderBySql">orderby${orderFieldStr}${orderDirectionStr}</sql></mapper>这里面的字段属性都是针对PagenateArgs参数类中的属性名,保持一致。
<iftest="pageStart>-1andpageSize>-1">limit#{pageStart},#{pageSize}</if>
在DemoRun类中创建测试方法:
/**分页参数*/publicstaticvoidqueryVisitorListWithPagenate(intpageIndex,intpageSize,StringorderField,StringorderDire){PagenateArgsargs=newPagenateArgs(pageIndex,pageSize,orderField,orderDire);SqlSessionsession=MybatisUtils.getSqlSession();IVisitorOperationvOperation=session.getMapper(IVisitorOperation.class);List<Visitor>visitors=vOperation.getListByPagenate(args);for(Visitorvisitor:visitors){System.out.println(visitor);}MybatisUtils.closeSession(session);MybatisUtils.showMessages(CRUD_Enum.List,visitors.size());}
DemoRun.queryVisitorListWithPagenate(0,100,"id",SortDirectionEnum.DESC.toString());
运行后下测试结果,先按Id倒序排列,查的Visitor表一共有14条记录,
假设取在第2页取5条,执行下面也就是6-10条数据,这样传参数就行了
DemoRun.queryVisitorListWithPagenate(1,5,"id",SortDirectionEnum.DESC.toString());
结果如下:
实现了一个分页逻辑.
感谢邀请、干货分享、绝不私藏~
我是明哥,前麦肯锡战略咨询顾问,埃森哲管理咨询顾问,13年职场经历,一个喜欢用思维导图架构PPT的老司机,欢迎关注我的头条号,一起成为职场精英。汇报什么如何汇报汇报PPT如何设计汇报技巧:结构化汇报技巧:动态图表汇报技巧:创意图表汇报技巧:逻辑汇报技巧:蜂窝封面有用请点赞、转发~
关注【思维导图PPT】,每天分享一篇思维导图、PPT、职场技巧干货,希望你的每次来访都有所收获,感谢您的点赞、转发、助您早日升职加薪!1.第一步,确保你的thinkphp版本支持分页与排序功能。在thinkphp3.2版本及更高版本中,默认已经包含了分页与排序功能,无需额外操作。如果你使用的是较早的版本,可能需要进行升级或手动引入相关扩展库。
2.第二步,定义分页与排序参数。在你的控制器中,你需要获取用户的分页与排序参数,并传递给查询方法。一般来说,分页参数包括当前页码和每页显示的数据条数,而排序参数包括排序字段和排序方式(升序或降序)。
例如,你可以通过`$page=i('get.page',1,'intval');`来获取当前页码,默认为第一页,通过`$limit=i('get.limit',10,'intval');`来获取每页显示的数据条数,默认为10。
3.第三步,使用分页与排序功能进行查询。在你的数据查询方法中,使用thinkphp提供的分页与排序方法,例如`->order('fieldasc')`或`->order('fielddesc')`来实现字段的升序或降序排序。同时,可以使用`->limit($start,$limit)`来限制查询结果的范围,其中`$start=($page-1)*$limit`。
例如,你可以使用`$list=$model->order('create_timedesc')->limit($start,$limit)->select();`来按照创建时间倒序排序,并限制查询结果在指定范围内。
通过以上三个步骤,你可以在thinkphp中实现分页与排序功能。确保你的分页参数和排序参数正确传递,并在查询方法中使用相应的方法进行分页与排序操作。
选把表格按想分类的字段排序,点中表格中的任意一个单元格,数据\分类汇总。分类字段选一下。汇总方式一般是求和或计数等。如果每类字段行数很多,一页打不完,但又不想和下一类打在一页,勾选每组数据分页,那么在每组数据后面就会加入一个分页符,这样在打印时,更方便些。
好了,文章到这里就结束啦,如果本次分享的thinkphp怎么实现分页排序和动态分页排序怎么弄好看问题对您有所帮助,还望关注下本站哦!