fox

2018-04-09 17:48

@jfinal 谢谢, 我试试不懂再来请教.

fox

2018-04-09 17:39

请问一下大家是如何测试支付功能的, 我以前申请了一个个人的公众号,能用做做支付开发测试吗? 好像不行,一定要企业公众号?

fox

2018-01-18 22:58

ok,明白了

fox

2018-01-18 17:28

@JFinal 就是单步调试发现Model类中的doPaginate方法出问题, 少了一个' select '
我自已扩展一个AnsiSqlDialect重写doPaginate已经可以分页了,
我想问的是如果用3.3自带的分页对MS-SQL2000是不是还不能很好的支持.

fox

2018-01-18 14:32

@Jfinal
如果我要改写Model 类:中的 Page doPaginate() 这个方法,应如何做? 能不能像AnsiSqlDialect 一样,扩展一个自定义Model 出来

fox

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);
}
}

fox

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());

运行报错,

fox

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;
}

fox

2018-01-17 18:08

@JFinal看到了,

旧版本:
public void forPaginate(StringBuilder sql, int pageNumber, int pageSize,
String select, String sqlExceptSelect)

新版本: public String forPaginate(int pageNumber, int pageSize,
StringBuilder findSql) 这个方法要重写,正在想怎么处理.

fox

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的分页应如何处理?

fox

2018-01-17 10:48

com.jfinal.plugin.activerecord.ActiveRecordException: Your should not invoke this method because takeOverDbPaginate(...) will take over it.
XXXX.dao.paginate( curPageNo,pageNum,"id,no" , sql.toString()); 分页这处报错,takeOverDbPaginate怎么用?
升级前是能正常运行的.

fox

2018-01-17 10:33

可以了, new ActiveRecordPlugin() 时,漏了配置名称

fox

2018-01-17 10:23

@Jfinal DbKit.getConfig("sql2000").getConnection(); 这个也不能用了?

fox

2018-01-16 17:55

@jfinal @ClearInterceptor 换在 @clear了?

fox

2018-01-16 17:42

@jfinal 谢谢, 我先看一下文档升级注意事项先.