mybatis-plus分页 count 语句去掉order拼接
时间: 2023-09-20 18:12:36 浏览: 212
解决myBatis中删除条件的拼接问题
Mybatis-Plus提供了一个方便的分页插件PaginationInterceptor,它可以自动拦截SQL语句并为其添加分页功能。但是默认情况下,该插件生成的分页SQL语句中会包含ORDER BY语句,这可能会影响查询效率。如果我们不需要排序,可以通过以下方式去掉分页SQL语句中的ORDER BY语句:
1. 编写自定义的CountSqlParser类,继承DefaultCountSqlParser类并重写parse方法,去掉SQL语句中的ORDER BY子句:
```java
public class NoOrderCountSqlParser extends DefaultCountSqlParser {
@Override
public String parse(String originalSql) {
String sql = super.parse(originalSql);
int index = sql.toLowerCase().lastIndexOf("order by");
if (index > 0) {
sql = sql.substring(0, index);
}
return sql;
}
}
```
2. 在Mybatis配置文件中添加自定义的CountSqlParser:
```xml
<bean id="mybatisSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:mapper/*.xml" />
<property name="plugins">
<array>
<!-- 分页插件 -->
<bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor">
<!-- 去掉 count SQL 中的 order by 子句 -->
<property name="countSqlParser" ref="noOrderCountSqlParser" />
</bean>
</array>
</property>
</bean>
<bean id="noOrderCountSqlParser" class="com.example.NoOrderCountSqlParser" />
```
通过以上方式,我们可以很方便地去掉Mybatis-Plus生成的分页SQL语句中的ORDER BY子句,提高查询效率。
阅读全文