mybatisplus 自定义 getList 如何调整 page 分页的 计数sql
时间: 2023-07-18 09:37:34 浏览: 63
MybatisPlus 中的 `getList` 方法默认使用了 MybatisPlus 提供的分页插件进行分页查询,该插件在执行分页查询时需要先执行一条总记录数的 SQL 语句来获取总记录数,再根据总记录数计算出分页信息。该 SQL 语句的生成逻辑由插件内部的 `CountOptimizePlugin` 类完成,我们可以通过继承该类并重写其中的方法来自定义计数 SQL 语句的生成逻辑。
具体步骤如下:
1. 创建自定义的 `CountOptimizePlugin` 类,继承 MybatisPlus 默认的 `CountOptimizePlugin` 类,并重写其中的 `optimizeCountSql` 方法,该方法用于生成计数 SQL 语句。
```java
public class CustomCountOptimizePlugin extends CountOptimizePlugin {
@Override
public String optimizeCountSql(String originalSql) {
// 在原始 SQL 语句的基础上进行修改,生成自定义的计数 SQL 语句
return "SELECT COUNT(*) FROM (" + originalSql + ") tmp";
}
}
```
2. 在 MybatisPlus 的配置文件中启用自定义的插件,同时禁用默认的 `CountOptimizePlugin` 插件。
```xml
<!-- MybatisPlus 配置 -->
<configuration>
<!-- 自定义的 CountOptimizePlugin 插件 -->
<plugins>
<plugin interceptor="com.example.CustomCountOptimizePlugin"/>
</plugins>
<!-- 禁用默认的 CountOptimizePlugin 插件 -->
<global-config>
<db-config>
<logic-delete-value>-1</logic-delete-value>
<logic-not-delete-value>1</logic-not-delete-value>
<id-type>auto</id-type>
<field-strategy>not_empty</field-strategy>
<for-update-strategy>IGNORE</for-update-strategy>
<sql-injector>com.baomidou.mybatisplus.core.injector.DefaultSqlInjector</sql-injector>
<key-generator>easemob.service.common.mybatis.MySqlKeyGenerator</key-generator>
<column-format>underline_to_camel</column-format>
<refresh-mapper>true</refresh-mapper>
<capital-mode>false</capital-mode>
<count-sql-parser>com.example.CustomCountOptimizePlugin</count-sql-parser>
</db-config>
</global-config>
</configuration>
```
在上面的配置中,我们将自定义的 `CustomCountOptimizePlugin` 插件添加到了 MybatisPlus 的插件列表中,并在 `global-config` 中通过 `count-sql-parser` 属性指定了自定义的插件类。这样,在执行分页查询时,MybatisPlus 就会使用我们自定义的插件来生成计数 SQL 语句,从而实现对分页计数 SQL 语句的自定义。
需要注意的是,以上代码仅供参考,具体实现可能需要根据业务需求进行相应的修改。