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