Просмотр исходного кода

集成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);
shuzheng 9 лет назад
Родитель
Сommit
4f09acfdaa

+ 4 - 5
zheng-common/pom.xml

@@ -22,6 +22,7 @@
 
 
         <mybatis.version>3.4.2</mybatis.version>
         <mybatis.version>3.4.2</mybatis.version>
         <mybatis-spring.version>1.3.1</mybatis-spring.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-generator.version>1.3.5</mybatis-generator.version>
         <mybatis-ehcache.version>1.0.0</mybatis-ehcache.version>
         <mybatis-ehcache.version>1.0.0</mybatis-ehcache.version>
         <ehcache.version>2.10.0</ehcache.version>
         <ehcache.version>2.10.0</ehcache.version>
@@ -112,13 +113,11 @@
             <artifactId>mybatis-spring</artifactId>
             <artifactId>mybatis-spring</artifactId>
             <version>${mybatis-spring.version}</version>
             <version>${mybatis-spring.version}</version>
         </dependency>
         </dependency>
-        <!--
         <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>
-        -->
         <dependency>
         <dependency>
             <groupId>org.mybatis.generator</groupId>
             <groupId>org.mybatis.generator</groupId>
             <artifactId>mybatis-generator-core</artifactId>
             <artifactId>mybatis-generator-core</artifactId>

+ 8 - 0
zheng-common/src/main/java/com/zheng/common/base/BaseService.java

@@ -24,6 +24,14 @@ public interface BaseService<Record, Example> {
 
 
 	List<Record> selectByExample(Example 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 selectFirstByExample(Example example);
 
 
 	Record selectFirstByExampleWithBLOBs(Example example);
 	Record selectFirstByExampleWithBLOBs(Example example);

+ 61 - 0
zheng-common/src/main/java/com/zheng/common/base/BaseServiceImpl.java

@@ -1,5 +1,6 @@
 package com.zheng.common.base;
 package com.zheng.common.base;
 
 
+import com.github.pagehelper.PageHelper;
 import com.zheng.common.db.DataSourceEnum;
 import com.zheng.common.db.DataSourceEnum;
 import com.zheng.common.db.DynamicDataSource;
 import com.zheng.common.db.DynamicDataSource;
 import com.zheng.common.util.SpringContextUtil;
 import com.zheng.common.util.SpringContextUtil;
@@ -116,6 +117,66 @@ public abstract class BaseServiceImpl<Mapper, Record, Example> implements BaseSe
 		return null;
 		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
 	@Override
 	public Record selectFirstByExample(Example example) {
 	public Record selectFirstByExample(Example example) {
 		try {
 		try {

+ 20 - 0
zheng-common/src/main/java/com/zheng/common/base/BaseServiceMock.java

@@ -45,6 +45,26 @@ public abstract class BaseServiceMock<Mapper, Record, Example> implements BaseSe
 		return null;
 		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
 	@Override
 	public Record selectFirstByExample(Example example) {
 	public Record selectFirstByExample(Example example) {
 		return null;
 		return null;

+ 49 - 0
zheng-common/src/main/resources/mybatis-config.xml

@@ -9,4 +9,53 @@
 		<setting name="cacheEnabled" value="false"/>
 		<setting name="cacheEnabled" value="false"/>
 	</settings>
 	</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>
 </configuration>