集成Mybatis PageHelper,支持多类型多数据源物理分页。增强BaseService支持分页。口。

增加BaseService四个通用方法:
List<Record> selectByExampleWithBLOBsForStartPage(Example example,
Integer pageNum, Integer pageSize);
List<Record> selectByExampleForStartPage(Example example, Integer
pageNum, Integer pageSize);
List<Record> selectByExampleWithBLOBsForOffsetPage(Example example,
Integer offset, Integer limit);
List<Record> selectByExampleForOffsetPage(Example example, Integer
offset, Integer limit);
This commit is contained in:
shuzheng 2017-05-02 18:31:15 +08:00
parent d98308ff08
commit 4f09acfdaa
5 changed files with 142 additions and 5 deletions

View File

@ -22,6 +22,7 @@
<mybatis.version>3.4.2</mybatis.version>
<mybatis-spring.version>1.3.1</mybatis-spring.version>
<mybatis-pagehelper.version>5.0.1</mybatis-pagehelper.version>
<mybatis-generator.version>1.3.5</mybatis-generator.version>
<mybatis-ehcache.version>1.0.0</mybatis-ehcache.version>
<ehcache.version>2.10.0</ehcache.version>
@ -112,13 +113,11 @@
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<!--
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.0</version>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${mybatis-pagehelper.version}</version>
</dependency>
-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>

View File

@ -24,6 +24,14 @@ public interface BaseService<Record, Example> {
List<Record> selectByExample(Example example);
List<Record> selectByExampleWithBLOBsForStartPage(Example example, Integer pageNum, Integer pageSize);
List<Record> selectByExampleForStartPage(Example example, Integer pageNum, Integer pageSize);
List<Record> selectByExampleWithBLOBsForOffsetPage(Example example, Integer offset, Integer limit);
List<Record> selectByExampleForOffsetPage(Example example, Integer offset, Integer limit);
Record selectFirstByExample(Example example);
Record selectFirstByExampleWithBLOBs(Example example);

View File

@ -1,5 +1,6 @@
package com.zheng.common.base;
import com.github.pagehelper.PageHelper;
import com.zheng.common.db.DataSourceEnum;
import com.zheng.common.db.DynamicDataSource;
import com.zheng.common.util.SpringContextUtil;
@ -116,6 +117,66 @@ public abstract class BaseServiceImpl<Mapper, Record, Example> implements BaseSe
return null;
}
@Override
public List<Record> selectByExampleWithBLOBsForStartPage(Example example, Integer pageNum, Integer pageSize) {
try {
DynamicDataSource.setDataSource(DataSourceEnum.SLAVE.getName());
Method selectByExampleWithBLOBs = mapper.getClass().getDeclaredMethod("selectByExampleWithBLOBs", example.getClass());
PageHelper.startPage(pageNum, pageSize, false);
Object result = selectByExampleWithBLOBs.invoke(mapper, example);
return (List<Record>) result;
} catch (Exception e) {
e.printStackTrace();
}
DynamicDataSource.clearDataSource();
return null;
}
@Override
public List<Record> selectByExampleForStartPage(Example example, Integer pageNum, Integer pageSize) {
try {
DynamicDataSource.setDataSource(DataSourceEnum.SLAVE.getName());
Method selectByExample = mapper.getClass().getDeclaredMethod("selectByExample", example.getClass());
PageHelper.startPage(pageNum, pageSize, false);
Object result = selectByExample.invoke(mapper, example);
return (List<Record>) result;
} catch (Exception e) {
e.printStackTrace();
}
DynamicDataSource.clearDataSource();
return null;
}
@Override
public List<Record> selectByExampleWithBLOBsForOffsetPage(Example example, Integer offset, Integer limit) {
try {
DynamicDataSource.setDataSource(DataSourceEnum.SLAVE.getName());
Method selectByExampleWithBLOBs = mapper.getClass().getDeclaredMethod("selectByExampleWithBLOBs", example.getClass());
PageHelper.offsetPage(offset, limit, false);
Object result = selectByExampleWithBLOBs.invoke(mapper, example);
return (List<Record>) result;
} catch (Exception e) {
e.printStackTrace();
}
DynamicDataSource.clearDataSource();
return null;
}
@Override
public List<Record> selectByExampleForOffsetPage(Example example, Integer offset, Integer limit) {
try {
DynamicDataSource.setDataSource(DataSourceEnum.SLAVE.getName());
Method selectByExample = mapper.getClass().getDeclaredMethod("selectByExample", example.getClass());
PageHelper.offsetPage(offset, limit, false);
Object result = selectByExample.invoke(mapper, example);
return (List<Record>) result;
} catch (Exception e) {
e.printStackTrace();
}
DynamicDataSource.clearDataSource();
return null;
}
@Override
public Record selectFirstByExample(Example example) {
try {

View File

@ -45,6 +45,26 @@ public abstract class BaseServiceMock<Mapper, Record, Example> implements BaseSe
return null;
}
@Override
public List<Record> selectByExampleWithBLOBsForStartPage(Example example, Integer pageNum, Integer pageSize) {
return null;
}
@Override
public List<Record> selectByExampleForStartPage(Example example, Integer pageNum, Integer pageSize) {
return null;
}
@Override
public List<Record> selectByExampleWithBLOBsForOffsetPage(Example example, Integer offset, Integer limit) {
return null;
}
@Override
public List<Record> selectByExampleForOffsetPage(Example example, Integer offset, Integer limit) {
return null;
}
@Override
public Record selectFirstByExample(Example example) {
return null;

View File

@ -9,4 +9,53 @@
<setting name="cacheEnabled" value="false"/>
</settings>
<!-- 插件-->
<plugins>
<!-- 分页插件 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!--
分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect属性来指定分页插件使用哪种方言。配置时可以使用下面的缩写值
oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby
特别注意:使用 SqlServer2012 数据库时,需要手动指定为 sqlserver2012否则会使用 SqlServer2005 的方式进行分页
-->
<!--<property name="helperDialect" value="mysql"/>-->
<!--
默认值为 false该参数对使用 RowBounds 作为分页参数时有效。
当该参数设置为 true 时,会将 RowBounds 中的 offset 参数当成 pageNum 使用,可以用页码和页面大小两个参数进行分页。
-->
<property name="offsetAsPageNum" value="false"/>
<!--
默认值为false该参数对使用 RowBounds 作为分页参数时有效。 当该参数设置为true时使用 RowBounds 分页会进行 count 查询。
-->
<property name="rowBoundsWithCount" value="true"/>
<!--
默认值为 false当该参数设置为 true 时,如果 pageSize=0 或者 RowBounds.limit = 0 就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是 Page 类型)。
-->
<property name="pageSizeZero" value="false"/>
<!--
分页合理化参数默认值为false。当该参数设置为 true 时pageNum<=0 时会查询第一页, pageNum>pages超过总数时会查询最后一页。默认false 时,直接根据参数进行查询。
-->
<property name="reasonable" value="false"/>
<!--
为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable不配置映射的用默认值
默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。
-->
<property name="params" value="pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero"/>
<!--
支持通过 Mapper 接口参数来传递分页参数默认值false分页插件会从查询方法的参数值中自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。
使用方法可以参考测试代码中的 com.github.pagehelper.test.basic 包下的 ArgumentsMapTest 和 ArgumentsObjTest。
-->
<property name="supportMethodsArguments" value="false"/>
<!--
默认值为 false。设置为 true 时,允许在运行时根据多数据源自动识别对应方言的分页 不支持自动选择sqlserver2012只能使用sqlserver
-->
<property name="autoRuntimeDialect" value="true"/>
<!--
默认值为 true。当使用运行时动态数据源或没有设置 helperDialect 属性自动获取数据库类型时,会自动获取一个数据库连接, 通过该属性来设置是否关闭获取的这个连接
默认true关闭设置为 false 后,不会关闭获取的连接,这个参数的设置要根据自己选择的数据源来决定。
-->
<property name="closeConn" value="true"/>
</plugin>
</plugins>
</configuration>