From e2a67fc8b3e1568e60a01da44a4f551cf0f399b8 Mon Sep 17 00:00:00 2001 From: outian <519434681@qq.com> Date: Sun, 24 Apr 2022 18:30:30 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=84=E8=8C=83PostgreSQL=E5=88=86=E9=A1=B5?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E7=9A=84=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dialect/helper/PostgreSqlDialect.java | 36 +++++++++++++++++-- .../rowbounds/PostgreSqlRowBoundsDialect.java | 4 +-- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/pagehelper/dialect/helper/PostgreSqlDialect.java b/src/main/java/com/github/pagehelper/dialect/helper/PostgreSqlDialect.java index 8d16bdaa..44f35b9e 100644 --- a/src/main/java/com/github/pagehelper/dialect/helper/PostgreSqlDialect.java +++ b/src/main/java/com/github/pagehelper/dialect/helper/PostgreSqlDialect.java @@ -24,9 +24,19 @@ package com.github.pagehelper.dialect.helper; +import com.github.pagehelper.dialect.AbstractHelperDialect; +import com.github.pagehelper.util.MetaObjectUtil; import org.apache.ibatis.cache.CacheKey; import com.github.pagehelper.Page; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.ParameterMapping; +import org.apache.ibatis.reflection.MetaObject; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; /** * PostgreSQL 方言. @@ -34,7 +44,29 @@ * @author liym * @since 2021-02-06 19:27 新建 */ -public class PostgreSqlDialect extends MySqlDialect { +public class PostgreSqlDialect extends AbstractHelperDialect { + + @Override + public Object processPageParameter(MappedStatement ms, Map paramMap, Page page, BoundSql boundSql, CacheKey pageKey) { + paramMap.put(PAGEPARAMETER_SECOND, page.getPageSize()); + paramMap.put(PAGEPARAMETER_FIRST, page.getStartRow()); + //处理pageKey + pageKey.update(page.getPageSize()); + pageKey.update(page.getStartRow()); + //处理参数配置 + if (boundSql.getParameterMappings() != null) { + List newParameterMappings = new ArrayList(boundSql.getParameterMappings()); + if (page.getStartRow() == 0) { + newParameterMappings.add(new ParameterMapping.Builder(ms.getConfiguration(), PAGEPARAMETER_SECOND, int.class).build()); + } else { + newParameterMappings.add(new ParameterMapping.Builder(ms.getConfiguration(), PAGEPARAMETER_SECOND, int.class).build()); + newParameterMappings.add(new ParameterMapping.Builder(ms.getConfiguration(), PAGEPARAMETER_FIRST, long.class).build()); + } + MetaObject metaObject = MetaObjectUtil.forObject(boundSql); + metaObject.setValue("parameterMappings", newParameterMappings); + } + return paramMap; + } /** * 构建 PostgreSQL分页查询语句 @@ -46,7 +78,7 @@ public String getPageSql(String sql, Page page, CacheKey pageKey) { if (page.getStartRow() == 0) { sqlStr.append(" LIMIT ?"); } else { - sqlStr.append(" OFFSET ? LIMIT ?"); + sqlStr.append(" LIMIT ? OFFSET ?"); } return sqlStr.toString(); } diff --git a/src/main/java/com/github/pagehelper/dialect/rowbounds/PostgreSqlRowBoundsDialect.java b/src/main/java/com/github/pagehelper/dialect/rowbounds/PostgreSqlRowBoundsDialect.java index 112f48cd..d6f025b9 100644 --- a/src/main/java/com/github/pagehelper/dialect/rowbounds/PostgreSqlRowBoundsDialect.java +++ b/src/main/java/com/github/pagehelper/dialect/rowbounds/PostgreSqlRowBoundsDialect.java @@ -48,10 +48,10 @@ public String getPageSql(String sql, RowBounds rowBounds, CacheKey pageKey) { sqlStr.append(" LIMIT "); sqlStr.append(rowBounds.getLimit()); } else { - sqlStr.append(" OFFSET "); - sqlStr.append(rowBounds.getOffset()); sqlStr.append(" LIMIT "); sqlStr.append(rowBounds.getLimit()); + sqlStr.append(" OFFSET "); + sqlStr.append(rowBounds.getOffset()); pageKey.update(rowBounds.getOffset()); } pageKey.update(rowBounds.getLimit());