JFinal之Model功能扩展的问题

Jetmark 发布于 2013/05/11 11:49
阅读 2K+
收藏 3

JFinal中POJO的定义与DAO是可以放在一起的,这个JFinal已经给了很好的例子:

public static final User dao = new User();
这个dao是定义在User中的,User是继承Model的POJO类,在该类中如定义方法getUser(),就可以采用User.dao.getUser()的形式访问。一般写项目首先Entity然后在写DAO,在JFinal中就只要写一个UserModel就可以了,可以少写一个类了, JFinal-BBS中就是这样做的,有兴趣的可以看下JFinal-BBS的源码。但这样做,不知道在类加载,或内存使用方面有什么优缺点没有,也请各位大牛们分析下。

真正的问题在这里:我项目中使用的是Oracle数据库,不管Oracle字段中定义的主键是Number或是Integer型的(这里暂不考虑使用VARCHAR),在Model中取值时,需要这样写:long id = getBigDecimal("id").longValue();除了主键,其他定义的Number或Integer型字段都要这样取值。因此代码中包括了很多这样的代码,为保证项目今后想MySQL等数据库移植方便,想增加一个longValue()方法,直接转换取值。最好的方法是在Model类中增加longValue()方法,但在不修改JFinal源码的情况下,如何更简单地在每个UserModel中取longValue呢,不要告诉我在每个UserModel中增加longValue()方法哦。

加载中
1
JFinal
JFinal

针对于你的需求,如下两步走:

1:建一个自己的Model,名称仍叫Model,只是让包名不同

public abstract class Model<M extends Model> extends com.jfinal.plugin.activerecord.Model<M> {
  public Integer getInt(String attr) {
    return super.getNumber(attr).intValue();
  }
	
  public Long getLong(String attr) {
    return super.getNumber(attr).longValue();
  }
}
2:User示例
public class User extends Model<User> {
  public static final User dao = new User();
}
  将自定义的Model也命名为Model,方便将来后悔时改下import中的包名就可以切回到JFinal默认用法



紫电清霜
紫电清霜
很好的思路,哈哈:)
1
紫电清霜
紫电清霜

刚刚的问题解决了吗?

“一般写项目首先Entity然后在写DAO,在JFinal中就只要写一个UserModel就可以了,可以少写一个类了, JFinal-BBS中就是这样做的,有兴趣的可以看下JFinal-BBS的源码。但这样做,不知道在类加载,或内存使用方面有什么优缺点没有,也请各位大牛们分析下。”

以往的做法确实得分很多层,dao,entity,service,但是我觉得小项目没必要搞这么多层,jfinal的作者也建议一般的dao操作直接放entity(model)里(因为entity没有了一大堆getter和setter了,解放出来的空间可以放入dao操作),代码更紧凑,遇上特别复杂的dao逻辑什么的,可以放入service里。

Jetmark
Jetmark
确实如此,小项目的话,JFinal中直接一个类就搞定了,就是类膨胀了,如果觉得不好的话,仍然可以分层的。
0
JFinal
JFinal
    自定义一个com.xxx.Model 继承自 com.jfinal.plugin.activerecrod.Model,在这个Model中加上你自己有用的方法即可。使用时让User继承自你自己的Model就可以
JFinal
JFinal
回复 @Jetmark : 最终的 model 继承你自己创建的 model 类
Jetmark
Jetmark
@JFinal 再回来看下!
Jetmark
Jetmark
我也这样想过,因为JFinal的Model是这样定义的:public abstract class Model<M extends Model> implements Serializable {,com.xxx.Model继承应该怎么写呢,其他继承自com.xxx.Model的POJO类的继承写法和原先类似吧!
Jetmark
Jetmark
然后,我所有的POJO都继承我定义的com.xxx.Model,是吧:)
0
I
IT女孩的梦
但是私有的方法是继承不来的
JFinal
JFinal
私有方法不能继承,但可以自由定义自己需要的方法用来扩展功能
0
I
IT女孩的梦
应该怎么办啊
返回顶部
顶部