4
回答
jfinal的Record怎么扩展或者加入自定义方法
华为云4核8G,高性能云服务器,免费试用   

@JFinal 你好,想跟你请教个问题:一条普通的sql:select count(*) as cnt from users;

使用jfinal取出来是BigDecimal,而预期的则是int或者long

record = Db.find(sql);

record.getInt("cnt");//会报错ClassCast异常

如果record有类似方法就好了:record.asInt("cnt"),这个方法会进行自动转型

但是发现jfinal里面现在是直接new的Record,无法进行扩展

举报
kenny0x00
发帖于5年前 4回/414阅
共有4个答案 最后回答: 5年前

引用来自“JFinal”的答案

JFinal 虽然没有提供 getAsInt(String)方法,但是可以这样做:

record.getNumber(attr).intValue();
谢谢,补充一下:
RecordBuilder.build方法里面构造Record的代码,可以用IContainerFactory来注入就好了,这样就可以扩展自己的一些方法到record。
//40行 Record record = new Record();
变为:
Record record = DbKit.containerFactory.newRecord();
或者这个builder本身就是可以注入,可替换的

引用来自“kenny0x00”的答案

引用来自“JFinal”的答案

JFinal 虽然没有提供 getAsInt(String)方法,但是可以这样做:

record.getNumber(attr).intValue();
谢谢,补充一下:
RecordBuilder.build方法里面构造Record的代码,可以用IContainerFactory来注入就好了,这样就可以扩展自己的一些方法到record。
//40行 Record record = new Record();
变为:
Record record = DbKit.containerFactory.newRecord();
或者这个builder本身就是可以注入,可替换的
     曾经考虑过,但目前提出这个需求的人还非常少,等到很多人需要的时候考虑设计一下
--- 共有 2 条评论 ---
JFinal回复 @cctvsod : 用 get(String) 就好,这个可以支持任意类型 2年前 回复
cctvsodgetStr方法,如果是toString()就好了,现在是(String)getColumns().get("key") 经常导致类型转换错误,我就不用关心数据库里是什么类型的字段了,反正只是页面展示又不进行计算 2年前 回复
顶部