PageHelper自定義分頁實現


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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM