概述
import org.hibernate.dialect.Oracle10gDialect;
import org.hibernate.dialect.function.SQLFunctionTemplate;
import java.util.Locale;
/**
* Created by lihuaiyu on 2017/12/27.
* Email : 18633533023@163.com
* QQ : 284067520
*/
public class Oracle12cDialect extends Oracle10gDialect{
public Oracle12cDialect(){
super();
}
//重写该方法是为了在绑定分页参数时,把first和max位置对调,因为旧分页和新分页位置不一样
@Override
public boolean bindLimitParametersInReverseOrder() {
return false;
}
//重写该方法是为了使用limit方式,而不是用旧分页的max
@Override
public boolean useMaxForLimit() {
return false;
}
//重写拼接分页sql的方法,使用新分页~速度超快
@Override
public String getLimitString(String sql, boolean hasOffset) {
sql = sql.trim();
String forUpdateClause = null;
boolean isForUpdate = false;
int forUpdateIndex = sql.toLowerCase(Locale.ROOT).lastIndexOf("for update");
if(forUpdateIndex > -1) {
forUpdateClause = sql.substring(forUpdateIndex);
sql = sql.substring(0, forUpdateIndex - 1);
isForUpdate = true;
}
StringBuilder pagingSelect = new StringBuilder(sql.length() + 100);
//
if(hasOffset) {
//
pagingSelect.append("select * from ( select row_.*, rownum rownum_ from ( ");
//
} else {
//
pagingSelect.append("select * from ( ");
//
}
pagingSelect.append(sql);
if(hasOffset) {
pagingSelect.append(" offset ? rows fetch next ? rows only ");
} else {
pagingSelect.append(" fetch first ? rows only ");
}
if(isForUpdate) {
pagingSelect.append(" ");
pagingSelect.append(forUpdateClause);
}
return pagingSelect.toString();
}
}
最后
以上就是心灵美西装为你收集整理的Hibernate4重写Oracle分页方法,使用Oracle12c新分页语句的全部内容,希望文章能够帮你解决Hibernate4重写Oracle分页方法,使用Oracle12c新分页语句所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复