/*** Copyright © 2015-2020 JeePlus All rights reserved.*/
packagecom.jeeplus.common.persistence.dialect.db;importcom.jeeplus.common.persistence.dialect.Dialect;/*** Oracle的方言实现
*@author*@version1.0 2010-10-10 下午12:31
*@sinceJDK 1.5*/
public class OracleDialect implementsDialect {
@Overridepublic booleansupportsLimit() {return true;
}
@Overridepublic String getLimitString(String sql, int offset, intlimit) {returngetLimitString(sql, offset, Integer.toString(offset), Integer.toString(limit));
}/*** 将sql变成分页sql语句,提供将offset及limit使用占位符号(placeholder)替换.
*
* 如mysql
* dialect.getLimitString("select * from user", 12, ":offset",0,":limit") 将返回
* select * from user limit :offset,:limit
*
*
*@paramsql 实际SQL语句
*@paramoffset 分页开始纪录条数
*@paramoffsetPlaceholder 分页开始纪录条数-占位符号
*@paramlimitPlaceholder 分页纪录条数占位符号
*@return包含占位符的分页sql*/
public String getLimitString(String sql, intoffset, String offsetPlaceholder, String limitPlaceholder) {
sql=sql.trim();boolean isForUpdate = false;if (sql.toLowerCase().endsWith(" for update")) {
sql= sql.substring(0, sql.length() - 11);
isForUpdate= true;
}
StringBuilder pagingSelect= new StringBuilder(sql.length() + 100);if (offset > 0) {
pagingSelect.append("select * from ( select row_.*, rownum rownum_ from ( ");
}else{
pagingSelect.append("select * from ( ");
}
pagingSelect.append(sql);if (offset > 0) {
String endString= offsetPlaceholder + "+" +limitPlaceholder;
pagingSelect.append(" ) row_ where rownum <= "+endString+") where rownum_ > ").append(offsetPlaceholder);
}else{
pagingSelect.append(" ) where rownum <= "+limitPlaceholder);
}if(isForUpdate) {
pagingSelect.append(" for update");
}returnpagingSelect.toString();
}
}