Mybatis物理分页插件(目前mybatis下最好的物理分页)

关键字:Mybatis物理分页插件(目前mybatis下最好的物理分页)

使用方式:http://my.oschina.net/miemiedev/blog/135516

项目git地址:https://github.com/miemiedev/mybatis-paginator

miemiedev还提供了一系列针对mybatis的插件,项目首页:https://github.com/miemiedev

简单示例:

在Maven中加入依赖:

<dependencies>

...

<dependency>

<groupId>com.github.miemiedev</groupId>

<artifactId>mybatis-paginator</artifactId>

<version>1.2.15</version>

</dependency>

...

</dependencies>

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

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEconfiguration

PUBLIC"-//ibatis.apache.org//DTDConfig3.0//EN"

"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">

<configuration>

<plugins>

<plugininterceptor="com.github.miemiedev.mybatis.paginator.OffsetLimitInterceptor">

<propertyname="dialectClass"value="com.github.miemiedev.mybatis.paginator.dialect.OracleDialect"/>

</plugin>

</plugins>

</configuration>

注:如果使用mybatis-spring来整合mybatis,也可以这样配置(主要是加载分页插件)

<beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">

<propertyname="configLocation"value="classpath:/mybatis/mybatis-config.xml"></property>

<propertyname="dataSource"ref="dataSource"/>

<propertyname="mapperLocations">

<list>

<value>classpath*:/mybatis/common/*-*.xml</value>

<value>classpath*:/mybatis/${jdbc.dialect}/*-*.xml</value>

</list>

</property>

<propertyname="plugins">

<list>

<beanclass="com.github.miemiedev.mybatis.paginator.OffsetLimitInterceptor">

<propertyname="dialectClass"value="com.github.miemiedev.mybatis.paginator.dialect.MySQLDialect"></property>

</bean>

</list>

</property>

</bean>

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

<selectid="findByCity"resultType="map">

select*fromTEST_USERwherecity=#{city};

</select>

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

publicListfindByCity(Stringcity,PageBoundspageBounds){

Map<String,Object>params=newHashMap<String,Object>();

params.put("city",city);

returngetSqlSession().selectList("db.table.user.findByCity",params,pageBounds);

}

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

intpage=1;//页号

intpageSize=20;//每页数据条数

StringsortString="age.asc,gender.desc";//如果你想排序的话逗号分隔可以排序多列

PageBoundspageBounds=newPageBounds(page,pageSize,Order.formString(sortString));

Listlist=findByCity("BeiJing",pageBounds);

//获得结果集条总数

PageListpageList=(PageList)list;

System.out.println("totalCount:"+pageList.getPaginator().getTotalCount());

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

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

newPageBounds();//默认构造函数不提供分页,返回ArrayList

newPageBounds(intlimit);//取TOPN操作,返回ArrayList

newPageBounds(Order...order);//只排序不分页,返回ArrayList

newPageBounds(intpage,intlimit);//默认分页,返回PageList

newPageBounds(intpage,intlimit,Order...order);//分页加排序,返回PageList

newPageBounds(intpage,intlimit,List<Order>orders,booleancontainsTotalCount);//使用containsTotalCount来决定查不查询totalCount,即返回ArrayList还是PageList

相关推荐