简单说一下Jfinal Model静态dao对象误用的问题

   最近有很多jfinal的使用者在误用model静态dao,这里简单的说一下这个问题, @jfinal 考虑未来加入手册里面
   

   

Model定义

public class User extends Model<User> {
            public static final User dao = new User();
     }

手册里面的model常用法

// 创建name属性为James,age属性为25的User对象并添加到数据库
new User().set("name", "James").set("age", 25).save();

// 删除id值为25的User
User.dao.deleteById(25);

// 查询id值为25的User将其name属性改为James并更新到数据库
User.dao.findById(25).set("name", "James").update();

// 查询id值为25的user, 且仅仅取name与age两个字段的值
User user = User.dao.findById(25, "name, age");

首先我们通俗理解一下 jfinal中的model到底是一个什么样的角色,在我们习惯的ssh架构里面,我们有domain/entity/model/bo ,说法很多,反正就是承载数据的。然后我们有牛逼dao层,做数据访问。


那么在jfinal的体系里面,model就有这2个功能。


new User().set("name", "James").set("age", 25).save();
这里的User就相当于ssh架构里面的domain。


// 删除id值为25的User
User.dao.deleteById(25);
请注意这一句,如果我们吧这个静态属性替换一下。就是:

new User().deleteById(25);

这样也是可以的。

这里的User相当于ssh架构里的UserDao.

所以其实只要在程序里面用到model的地方无论是承载数据和做数据访问对象,只要是new User()出来是肯定不会有问题的。


那么为什么demo和手册里面都有Model.dao这样的用法呢。


个人理解有2个好处。


1   让做数据访问时候api调用简洁快速。

2   理论上省内存,因为每一次数据访问的时候使用的是同一个对象。


但是从目前的情况来看起带来了不好的后果,很多新手有误用的情况,用静态的dao对象来承载数据并持久化,这是一个错误的用法,是非线程安全的。


简单的说,只有到选择model做数据访问的时候才能使用静态dao对象来调用api,其他做实体承载数据的,必须new Model().




转载于:https://my.oschina.net/b1412/blog/84336

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值