Oracle 12C以上版本支持的分頁語句寫法:
SELECT * FROM T_USER ORDER BY CREATE_TIME OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;
由於mybatisplus分頁插件中的支持Oracle 12C以上版本的分頁,但是目前PageHelper不支持Oracle 12C以上版本的分頁語句寫法,因此我們需要自定義一個Oracle12cDialect類來實現生成新的分頁語句。
代碼如下:
package com.example.pagehelper; import com.github.pagehelper.Page; import com.github.pagehelper.dialect.AbstractHelperDialect; import org.apache.ibatis.cache.CacheKey; import org.apache.ibatis.mapping.BoundSql; import org.apache.ibatis.mapping.MappedStatement; import org.springframework.context.annotation.ComponentScan; import java.util.Map; public class Oracle12Dialect extends AbstractHelperDialect { @Override public Object processPageParameter(MappedStatement ms, Map<String, Object> paramMap, Page page, BoundSql boundSql, CacheKey pageKey) { paramMap.put("First_PageHelper", page.getStartRow());// 給第一個(占位符)?設置值 paramMap.put("Second_PageHelper", page.getEndRow()); // 給第二個(占位符)?設置值 pageKey.update(page.getStartRow()); pageKey.update(page.getEndRow()); this.handleParameter(boundSql, ms, Long.TYPE, Long.TYPE); return paramMap; } @Override public String getPageSql(String sql, Page page, CacheKey pageKey) { StringBuilder sqlBuilder = new StringBuilder(sql.length() + 39); sqlBuilder.append(sql); sqlBuilder.append("\n OFFSET ? ROWS FETCH NEXT ? ROWS ONLY ");// 原sql語句后面追加分頁語句 return sqlBuilder.toString(); } }
然后在application.yml文件中添加如下配置:
pagehelper:
helper-dialect: com.example.pagehelper.Oracle12Dialect
如果是引入的pagehelper-spring-boot-starter的依賴,不需要做其他配置就可以生效了;
如果僅僅是引入的pagehelper的依賴,還需要在mybatis的配置文件中加入攔截器PageInterceptor。