2018-01-18 17:28
@JFinal 就是单步调试发现Model类中的doPaginate方法出问题, 少了一个' select '
我自已扩展一个AnsiSqlDialect重写doPaginate已经可以分页了,
我想问的是如果用3.3自带的分页对MS-SQL2000是不是还不能很好的支持.
2018-01-18 14:32
@Jfinal
如果我要改写Model 类:中的 Page doPaginate() 这个方法,应如何做? 能不能像AnsiSqlDialect 一样,扩展一个自定义Model 出来
2018-01-18 14:21
@Jfinal
Model 类:
private Page doPaginate(int pageNumber, int pageSize, Boolean isGroupBySql, String select, String sqlExceptSelect, Object... paras) {
Config config = _getConfig();
Connection conn = null;
try {
conn = config.getConnection();
String totalRowSql = "select count(*) " + config.dialect.replaceOrderBy(sqlExceptSelect);
StringBuilder findSql = new StringBuilder();
// 这里是不是少了个" select " ? ,调试输出的SQL加个" select "就运行正常
findSql.append(' select ').append(select).append(' ').append(sqlExceptSelect);
return doPaginateByFullSql(config, conn, pageNumber, pageSize, isGroupBySql, totalRowSql, findSql, paras);
} catch (Exception e) {
throw new ActiveRecordException(e);
} finally {
config.close(conn);
}
}
2018-01-18 13:25
@Jfinal 我的意思是用3.3版默认分页不行, 如:
1. 在config中配置如下, 用3.3版本中自带的AnsiSqlDialect (没有自定义AnsiSqlDialect ) :
arpSQL2000.setDialect(new AnsiSqlDialect());
2. 然后在service层中分页处理如下:
XXX.dao.paginate(curPageNo
,pageNum
,"id,name"
,sql.toString());
运行报错,
2018-01-18 11:13
@jfinal 自已改写forPaginate可以分页了,但如我想用3.3自身的默认的分页功能还是不行.
也就是与 isTakeOverDbPaginate 返回真, 让它接管.
public boolean isTakeOverDbPaginate() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isTakeOverModelPaginate() {
// TODO Auto-generated method stub
return true;
}
2018-01-17 17:25
@JFinal 重写一次还是不行,没有红叉,但运行报错, 错误信息如下:
Caused by: com.jfinal.plugin.activerecord.ActiveRecordException: Your should not invoke this method because takeOverDbPaginate(...) will take over it.
at com.jfinal.plugin.activerecord.dialect.AnsiSqlDialect.forPaginate(AnsiSqlDialect.java:197)
at com.jfinal.plugin.activerecord.Model.doPaginateByFullSql(Model.java:382)
at com.jfinal.plugin.activerecord.Model.doPaginate(Model.java:340)
是这样的, 我数据库用的是SQL2000,自定义了一个MyAnsiDialect类:
Config 中这样调用: arpSQL2000.setDialect(new MyAnsiDialect());
MyAnsiDialect 类:
public class MyAnsiDialect extends AnsiSqlDialect {
public void forPaginate(StringBuilder sql, int pageNumber, int pageSize,
String select, String sqlExceptSelect) {
int notInPageNum = (pageNumber-1)*pageSize;
sql.append(" select top ").append(pageSize).append(" ").append(select);
sql.append(sqlExceptSelect).append(" where id not in (");
sql.append("select top ").append(notInPageNum).append(" id ");
sql.append(sqlExceptSelect).append(" order by id desc ");
sql.append(" ) order by id desc ");
System.out.println(sql);
}
...
...
...
}
以上代码哪不对,还是3.3版本针对MS-SQL2000的分页应如何处理?