jfinal的Record怎么扩展或者加入自定义方法

kenny0x00 发布于 2013/12/20 13:22
阅读 486
收藏 0

@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,无法进行扩展

加载中
1
缪斯的情人
缪斯的情人
select count(*) as cnt from users;取出来的是Long类型。Long num = Db.queryLong(sql)即可
0
JFinal
JFinal

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

record.getNumber(attr).intValue();
0
kenny0x00
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本身就是可以注入,可替换的
0
JFinal
JFinal

引用来自“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本身就是可以注入,可替换的
     曾经考虑过,但目前提出这个需求的人还非常少,等到很多人需要的时候考虑设计一下
JFinal
JFinal
回复 @cctvsod : 用 get(String) 就好,这个可以支持任意类型
c
cctvsod
getStr方法,如果是toString()就好了,现在是(String)getColumns().get("key") 经常导致类型转换错误,我就不用关心数据库里是什么类型的字段了,反正只是页面展示又不进行计算
返回顶部
顶部