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