黑马程序员技术交流社区
标题:
找资料写的sql server方言(适用于ibatis、hibernate)
[打印本页]
作者:
孙朋帅
时间:
2011-8-6 10:17
标题:
找资料写的sql server方言(适用于ibatis、hibernate)
sql server 关于分页一直都不能令人满意。对于少量数据来说不算什么,但是数据量一大,问题立马出现。慢慢的效率,看起来就让人不爽。但是自从sql server 2005以来增加ROW_NUMBER()函数,给大家带了曙光。就这个函数我写了个方言,以后自定义分页时用得到。经过测试此方言对于一般的sql语句,和带order by的语句支持较好。但是对于复杂点的复合语句还是不行。不过这个相对于,以前的top已经是很不错了。[code=java] public String getLimitString(String sql, int offset, int limit) {
// offset 第几页 limit 每页个数
sql=trim(sql);
int length=sql.length();
int subIndex=sql.indexOf(" from");
int subIndexOrder=sql.indexOf("order by");
StringBuffer sb=new StringBuffer(length);
sb.append("With Tb AS(").append(sql.substring(0, subIndex)).append(",ROW_NUMBER() OVER (");
if(subIndexOrder!=-1){
sb.append(sql.substring(subIndexOrder, length)).append(")as RN")
.append(sql.substring(subIndex, subIndexOrder));
}else{
sb.append("order by (select 0))as RN").append(sql.substring(subIndex, length));
}
sb.append(")select * from Tb Where RN Between ").append((offset-1)*limit+1).append(" and ")
.append(limit*offset).append(SQL_END_DELIMITER);
return sb.toString();
} [/code]注:ibatis和hibernate中关于sql server的分页一直都是假分页 !要想提高效率必须自定义方言,重写它们固有的方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2