mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 00:58:24 +08:00
fix:DB2 10.5版本不支持offset关键字进行分页,只能使用row_number over 窗户函数分页
This commit is contained in:
parent
7b880f58a9
commit
5f6697fd43
@ -42,6 +42,7 @@ public enum DbType {
|
|||||||
* DB2
|
* DB2
|
||||||
*/
|
*/
|
||||||
DB2("db2", "DB2 数据库"),
|
DB2("db2", "DB2 数据库"),
|
||||||
|
DB2_1005("db2_1005", "DB2 10.5版本数据库"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* H2
|
* H2
|
||||||
|
|||||||
@ -16,15 +16,15 @@
|
|||||||
package com.mybatisflex.core.dialect;
|
package com.mybatisflex.core.dialect;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.EnumMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import org.apache.ibatis.util.MapUtil;
|
||||||
import com.mybatisflex.core.FlexGlobalConfig;
|
import com.mybatisflex.core.FlexGlobalConfig;
|
||||||
import com.mybatisflex.core.dialect.impl.CommonsDialectImpl;
|
import com.mybatisflex.core.dialect.impl.CommonsDialectImpl;
|
||||||
|
import com.mybatisflex.core.dialect.impl.DB2105Dialect;
|
||||||
import com.mybatisflex.core.dialect.impl.DmDialect;
|
import com.mybatisflex.core.dialect.impl.DmDialect;
|
||||||
import com.mybatisflex.core.dialect.impl.OracleDialect;
|
import com.mybatisflex.core.dialect.impl.OracleDialect;
|
||||||
import com.mybatisflex.core.util.ObjectUtil;
|
import com.mybatisflex.core.util.ObjectUtil;
|
||||||
import org.apache.ibatis.util.MapUtil;
|
|
||||||
|
|
||||||
import java.util.EnumMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 方言工厂类,用于创建方言
|
* 方言工厂类,用于创建方言
|
||||||
@ -139,6 +139,8 @@ public class DialectFactory {
|
|||||||
case FIREBIRD:
|
case FIREBIRD:
|
||||||
case DB2:
|
case DB2:
|
||||||
return new CommonsDialectImpl(KeywordWrap.NONE, LimitOffsetProcessor.DERBY);
|
return new CommonsDialectImpl(KeywordWrap.NONE, LimitOffsetProcessor.DERBY);
|
||||||
|
case DB2_1005:
|
||||||
|
return new DB2105Dialect(KeywordWrap.NONE, DB2105Dialect.DB2105LimitOffsetProcessor.DB2105);
|
||||||
case SQLSERVER:
|
case SQLSERVER:
|
||||||
return new CommonsDialectImpl(KeywordWrap.SQUARE_BRACKETS, LimitOffsetProcessor.SQLSERVER);
|
return new CommonsDialectImpl(KeywordWrap.SQUARE_BRACKETS, LimitOffsetProcessor.SQLSERVER);
|
||||||
case SQLSERVER_2005:
|
case SQLSERVER_2005:
|
||||||
|
|||||||
@ -0,0 +1,36 @@
|
|||||||
|
package com.mybatisflex.core.dialect.impl;
|
||||||
|
|
||||||
|
import com.mybatisflex.core.dialect.KeywordWrap;
|
||||||
|
import com.mybatisflex.core.dialect.LimitOffsetProcessor;
|
||||||
|
|
||||||
|
public class DB2105Dialect extends CommonsDialectImpl {
|
||||||
|
//TODO: 根据DatabaseMetaData获取数据库厂商名和版本号
|
||||||
|
public static final String DB2_1005_PRODUCT_VERSION = "1005";
|
||||||
|
public static final String DB2_PRODUCT_NAME = "DB2";
|
||||||
|
|
||||||
|
|
||||||
|
public DB2105Dialect(KeywordWrap keywordWrap, LimitOffsetProcessor limitOffsetProcessor) {
|
||||||
|
super(keywordWrap, limitOffsetProcessor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface DB2105LimitOffsetProcessor {
|
||||||
|
LimitOffsetProcessor DB2105 = (dialect, sql, queryWrapper, limitRows, limitOffset) -> {
|
||||||
|
StringBuilder limitSqlFragment = new StringBuilder(
|
||||||
|
"select * from ( select u_.*,rownumber() over() as rn from ( ");
|
||||||
|
limitSqlFragment.append(sql);
|
||||||
|
limitSqlFragment.append(" )u_ ) temp_ where temp_.rn between ");
|
||||||
|
|
||||||
|
if (limitRows != null && limitOffset != null) {
|
||||||
|
limitSqlFragment.append(limitOffset + 1);
|
||||||
|
limitSqlFragment.append(" and ");
|
||||||
|
limitSqlFragment.append(limitRows + limitOffset);
|
||||||
|
} else if (limitRows != null) {
|
||||||
|
limitSqlFragment.append("1 and ");
|
||||||
|
limitSqlFragment.append(limitRows);
|
||||||
|
} else {
|
||||||
|
return sql;
|
||||||
|
}
|
||||||
|
return limitSqlFragment;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user