mybatisplus oracle 分页查询 The error occurred while setting parameters
时间: 2025-01-06 20:41:29 浏览: 125
### MyBatisPlus Oracle 分页查询设置参数错误解决方案
当使用 MyBatisPlus 进行分页查询时,在不同的数据库环境下可能会遇到兼容性问题。对于 Oracle 数据库而言,主要问题是 MyBatisPlus 默认采用 `LIMIT` 语法进行分页操作,而这种语法并不被 Oracle 支持[^2]。
为了克服这一挑战并确保分页功能正常运作,可以采取以下措施:
#### 使用自定义分页插件适配器
创建一个继承自 `AbstractPaginationInterceptor` 的类,并重写其方法以适应 Oracle 特定的分页需求。通过这种方式能够灵活处理各种复杂的分页逻辑而不依赖于特定的 SQL 方言。
```java
public class OraclePaginationInterceptor extends AbstractPaginationInterceptor {
@Override
protected String processSql(String sql, int offset, int limit) {
StringBuilder pageSql = new StringBuilder(100);
pageSql.append("SELECT * FROM ( ");
pageSql.append("SELECT tmp_page.*, rownum rOWNum FROM ( ");
pageSql.append(sql);
pageSql.append(" ) tmp_page WHERE rownum <= ").append(offset + limit).append(")");
pageSql.append("WHERE rOWNum > ").append(offset);
return pageSql.toString();
}
}
```
此代码片段展示了如何构建适用于 Oracle 的分页 SQL 查询字符串[^3]。
#### 配置全局配置文件
在 Spring Boot 应用程序中的 `application.yml` 或者 `application.properties` 文件里指定使用的方言为 OracleDialect 并注册之前编写的拦截器实例。
```yaml
mybatis-plus:
global-config:
db-config:
id-type: auto
logic-delete-value: 1
logic-not-delete-value: 0
configuration:
default-scripting-language-driver: org.apache.ibatis.scripting.xmltags.XMLLanguageDriver
interceptors:
- com.example.OraclePaginationInterceptor
```
以上配置使得应用程序能够在启动期间自动加载定制化的分页处理器[^4]。
#### 修改 Mapper XML 中的 SQL 语句
考虑到原始 SQL 可能含有不兼容的关键字或表达式,建议调整 mapper xml 文件内的查询语句使其更加通用化,避免硬编码任何与具体 RDBMS 相关的内容。例如移除不必要的排序子句或将它们放置在一个可选的位置上以便根据实际情况动态决定是否应用。
```xml
<select id="selectPage" resultType="com.example.TestTable">
<if test="_parameter != null and _parameter.orderByClause != null">
ORDER BY ${_parameter.orderByClause}
</if>
</select>
```
这段 XML 展现了一个简单的例子说明怎样有条件地添加排序条件[^5]。
通过实施这些改进策略,应该可以在 Oracle 上成功运行带有分页特性的 MyBatisPlus 查询请求的同时保持良好的性能表现和稳定性。
阅读全文
相关推荐


















