MyBatis下最好的分页实现:mybatis-paginator使用入门
前两天写一个项目,发现在MyBatis下一个最好的分页实现类库mybatis-paginator,今天就写一篇其入门教程供大家参考。
1. 先引入maven依赖
1 2 3 4 5 | <dependency> <groupId>com.github.miemiedev</groupId> <artifactId>mybatis-paginator</artifactId> <version>1.2.15</version> </dependency> |
从这个依赖中,我们可以看到 1 他是mybatis的一个插件,2 其开源在GitHub上,感兴趣的可以去GitHub上搜源码看看,既然是mybatis的插件,下一步肯定就是和mybatis的集成了.
2. 和mybatis集成
①. 新建一个mybatis.xml的配置文件,其内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?xml version= "1.0" encoding= "UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" > <configuration> <settings> <setting name= "cacheEnabled" value= "true" /> <setting name= "lazyLoadingEnabled" value= "true" /> </settings> <plugins> <plugin interceptor= "com.github.miemiedev.mybatis.paginator.OffsetLimitInterceptor" > <property name= "dialectClass" value= "com.github.miemiedev.mybatis.paginator.dialect.MySQLDialect" /> <property name= "asyncTotalCount" value= "true" /> </plugin> </plugins> </configuration> |
②. 和spring集成,即在spring-mybatis.xml中引入该文件
1 2 3 4 5 6 7 8 9 10 | ...... <bean id= "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean" > <property name= "dataSource" ref= "dataSource" ></property> <property name= "configLocation" value= "classpath:mybatis.xml" /> <property name= "typeAliasesPackage" value= "cn.bridgeli.demo.entity" /> <property name= "mapperLocations" value= "classpath:cn/bridgeli/demo/mapper/*.xml" /> </bean> ...... |
因为这个文件太长,就不贴全文了,仅把位置这一块贴出来,当我们把这些配置工作做好之后,下一步就是如何使用了。
3. 分页工具类的封装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | package com.xmjr.mediastatis.util; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.math.NumberUtils; import com.github.miemiedev.mybatis.paginator.domain.PageBounds; import com.github.miemiedev.mybatis.paginator.domain.PageList; import com.github.miemiedev.mybatis.paginator.domain.Paginator; public class PagingUtil { public static PageBounds getPageBounds(Map<String, String> paramMap) { String paramPage = paramMap.get( "page" ); String paramPageSize = PropertiesUtil.getProperties( "pageSize" ); int page = NumberUtils.toInt(paramPage, 1); // 页号 int pageSize = NumberUtils.toInt(paramPageSize, 10); // 每页数据条数 // String sortString = "age.asc,gender.desc";//如果你想排序的话逗号分隔可以排序多列 PageBounds pageBounds = new PageBounds(page, pageSize); pageBounds.setAsyncTotalCount(true); pageBounds.setContainsTotalCount(true); return pageBounds; } public static Map<String, Object> toPageInfo(List<Map<String, Object>> detailList) { PageList<Map<String, Object>> value = (PageList<Map<String, Object>>) detailList; Map<String, Object> pageInfo = new HashMap<String, Object>(); Paginator paginator = value.getPaginator(); pageInfo.put( "totalCount" , paginator.getTotalCount()); pageInfo.put( "totalPages" , paginator.getTotalPages()); pageInfo.put( "page" , paginator.getPage()); pageInfo.put( "limit" , paginator.getLimit()); pageInfo.put( "items" , value); pageInfo.put( "startRow" , paginator.getStartRow()); pageInfo.put( "endRow" , paginator.getEndRow()); pageInfo.put( "offset" , paginator.getOffset()); pageInfo.put( "slider" , paginator.getSlider()); pageInfo.put( "prePage" , paginator.getPrePage()); pageInfo.put( "nextPage" , paginator.getNextPage()); pageInfo.put( "firstPage" , paginator.isFirstPage()); pageInfo.put( "hasNextPage" , paginator.isHasNextPage()); pageInfo.put( "hasPrePage" , paginator.isHasPrePage()); pageInfo.put( "lastPage" , paginator.isLastPage()); return pageInfo; } } |
至于封装的这些字段什么意思,大家可以自己去网上搜一些资料看看,其实很多都是见名知意的,当然这个工具类可能不是在大家的项目中可以直接使用的,如果要使用请根据具体情况做修改,修改的主要是toPageInfo方法的参数和第一行而已。好了,当这些准备工作做好之后就可以直接使用了,下面就说一些怎么使用。
4. mybatis-paginator的使用
其使用倒是非常简单,我们只需要在service层中构造我们的分页对象:PageBounds即可,然后把这个对象作为一个参数传到dao层,也就是说dao层除了以前的参数,再新加一个参数pageBounds,其余的mapper.xml等等文件该怎么写就怎么写,和以前可以说一点差别都没有,然后把返回值在封装成一个pageInfo对象,那么pageInfo对象里面就封装了所有我们分页所需要的数据,大家根据具体情况就可以做前端的分页了。例如老夫的实现:
1 2 3 | List<Map<String, Object>> itemInfos = itemMapper.getItems(param, pageBounds); Map<String, Object> pageInfo = PagingUtil.toPageInfo(itemInfos); LOG.info( "totalCount: " + pageInfo.get( "totalCount" )); |
因为这只是一个入门教程,所以更详细的资料大家可以参考:http://blog.csdn.net/szwangdf/article/details/27859847,老夫窃以为这小伙写的不错,当然大家也可以自己去网上搜其他资料,关于这个插件怎么用的教程其实还是蛮多的。
作 者: BridgeLi,https://www.bridgeli.cn
原文链接:http://www.bridgeli.cn/archives/164
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
近期评论