MyBatis下最好的分页实现:mybatis-paginator使用入门
前两天写一个项目,发现在MyBatis下一个最好的分页实现类库mybatis-paginator,今天就写一篇其入门教程供大家参考。
1. 先引入maven依赖
<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的配置文件,其内容如下:
<?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中引入该文件
......
<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. 分页工具类的封装
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对象里面就封装了所有我们分页所需要的数据,大家根据具体情况就可以做前端的分页了。例如老夫的实现:
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
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
近期评论