欢迎来到站长教程网!

MySQL

当前位置:主页 > 数据库 > MySQL >

[DB][MyBatis]利用mybatis-paginator实现分页

时间:2019-11-09|栏目:MySQL|点击:

利用mybatis-paginator实现分页 1、mybatis-paginator简介 mybatis-paginator是gethub上的一个开源项目、用于java后台获取分页数据、该开源项目还提供一个列表组件(mmgrid)用于前端展示。 该开源项目地址:https://github.com/miemiedev 2、该开源项目的使

利用mybatis-paginator实现分页

1、mybatis-paginator简介

mybatis-paginator是gethub上的一个开源项目、用于java后台获取分页数据、该开源项目还提供一个列表组件(mmgrid)用于前端展示。

该开源项目地址:https://github.com/miemiedev

2、该开源项目的使用说明:

Maven中加入依赖:

<dependencies> ... <dependency> <groupId>com.github.miemiedev</groupId> <artifactId>mybatis-paginator</artifactId> <version>1.2.10</version> </dependency> ... </dependencies>


Mybatis配置文件添加分页插件:

<?xmlversionxmlversion="1.0"encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" ""> <configuration> <plugins> <plugin interceptor="com.github.miemiedev.mybatis.paginator.OffsetLimitInterceptor"> <propertynamepropertyname="dialectClass"value="com.github.miemiedev.mybatis.paginator. dialect.OracleDialect"/> </plugin> </plugins> </configuration>


创建一个查询,内容可以是任何Mybatis表达式,包括foreach和if等:

<selectidselectid="findByCity"resultType="map"> select * from TEST_USER where city = #{city}; </select>


Dao中的方法或许是这样(用接口也是类似):

public List findByCity(String city, PageBounds pageBounds){ Mapparams =new HashMap(); params.put("city",city); returngetSqlSession().selectList("db.table.user.findByCity", params, pageBounds); }


调用方式(分页加多列排序):

int page = 1; //页号 int pageSize = 20; //每页数据条数 String sortString = "age.asc,gender.desc";//如果你想排序的话逗号分隔可以排序多列 PageBounds pageBounds = newPageBounds(page, pageSize , Order.formString(sortString)); List list = findByCity("BeiJing",pageBounds); //获得结果集条总数 PageList pageList = (PageList)list; System.out.println("totalCount: "+ pageList.getPaginator().getTotalCount());

PageList类是继承于ArrayList的,这样Dao中就不用为了专门分页再多写一个方法。

使用PageBounds这个对象来控制结果的输出,常用的使用方式一般都可以通过构造函数来配置。

new PageBounds();//默认构造函数不提供分页,返回ArrayList new PageBounds(int limit);//取TOPN操作,返回ArrayList new PageBounds(Order... order);//只排序不分页,返回ArrayList new PageBounds(int page, int limit);//默认分页,返回PageList new PageBounds(int page, int limit, Order... order);//分页加排序,返回PageList new PageBounds(int page, int limit, Listorders,boolean containsTotalCount); //使用containsTotalCount来决定查不查询totalCount,即返回ArrayList还是PageList


=========================================

如果用的是Spring MVC的话可以把JSON的配置写成这样:

<mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-argvalueconstructor-argvalue="UTF-8"/> </bean> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.github.miemiedev.mybatis.paginator.jackson2.PageListJsonMapper"/> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>

那么在Controller就可以这样用了:


@ResponseBody @RequestMapping(value ="/findByCity.json") public List findByCity(@RequestParam String city, @RequestParam(required =false,defaultValue ="1") intpage, @RequestParam(required =false,defaultValue ="30") intlimit, @RequestParam(required =false) String sort, @RequestParam(required =false) String dir) { return userService.findByCity(city, newPageBounds(page, limit, Order.create(sort,dir))); }




然后序列化后的JSON字符串就会变成这样的:

{ "items":[ {"NAME":"xiaoma","AGE":30,"GENDER":1,"ID":3,"CITY":"BeiJing"}, {"NAME":"xiaoli","AGE":30,"SCORE":85,"GENDER":1,"ID":1,"CITY":"BeiJing"}, {"NAME":"xiaowang","AGE":30,"SCORE":92,"GENDER":0,"ID":2,"CITY":"BeiJing"}, {"NAME":"xiaoshao","AGE":30,"SCORE":99,"GENDER":0,"ID":4,"CITY":"BeiJing"} ], "slider": [1, 2, 3, 4, 5, 6, 7], "hasPrePage":false, "startRow": 1, "offset": 0, "lastPage":false, "prePage": 1, "hasNextPage":true, "nextPage": 2, "endRow": 30, "totalCount": 40351, "firstPage":true, "totalPages": 1346, "limit": 30, "page": 1 }

=========================================

在SpringMVC中使用JSTL的话可以参考一下步骤(懒人用法)

上一篇: SQL Server 日志配置问题

栏    目:MySQL

下一篇:oracle创建存储过程两种方法

本文标题:[DB][MyBatis]利用mybatis-paginator实现分页

本文地址:http://www.jh-floor.com/shujuku/MySQL/123342.html

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:888888 | 邮箱:888888#qq.com(#换成@)

Copyright © 2002-2017 青云站长教程网 版权所有 琼ICP备xxxxxxxx号