文档章节

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

绝望的八皮
 绝望的八皮
发布于 2012/10/22 13:50
字数 575
阅读 4.2K
收藏 6

「深度学习福利」大神带你进阶工程师,立即查看>>>

   最近有很多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().




上一篇: 12月小结
绝望的八皮

绝望的八皮

粉丝 392
博文 22
码字总数 10505
作品 2
其它
CTO(技术副总裁)
私信 提问
加载中
此博客有 12 条评论,请先登录后再查看。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.5K
8
用vertx实现高吞吐量的站点计数器

工具:vertx,redis,mongodb,log4j 源代码地址:https://github.com/jianglibo/visitrank 先看架构图: 如果你不熟悉vertx,请先google一下。我这里将vertx当作一个容器,上面所有的圆圈要...

jianglibo
2014/04/03
4.2K
3
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
Swift百万线程攻破单例(Singleton)模式

一、不安全的单例实现 在上一篇文章我们给出了单例的设计模式,直接给出了线程安全的实现方法。单例的实现有多种方法,如下面: class SwiftSingleton { } 这段代码的实现,在shared中进行条...

一叶博客
2014/06/20
3.5K
16

没有更多内容

加载失败,请刷新页面

加载更多

ts 项目中 引入 js文件

创建项目 npx create-react-app my-app --template redux-typescript 最好将js相关的放到一起 index.js export const fib = (n) => (n < 2 ? n : fib(n - 1) + fib(n - 2)); index.d.ts......

阿豪boy
8分钟前
0
0
设计模式(17) 迭代器模式

迭代器模式 基于IEnumerable的实现 使用场景 迭代器模式的优缺点 迭代器模式 迭代器模式用于顺序访问集合对象的元素,而不需要知道集合对象的底层表示。Java和.Net等语言已经将迭代器作为其内...

zhixin9001
9分钟前
0
0
python 利用jinja2模板生成html代码实例

这篇文章主要介绍了python 利用jinja2模板生成html代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1 2 3 4 5 6 7 8 9 10 11 ...

stys35
15分钟前
10
0
【线性代数】范数(norm)

定义 范数是将向量映射到非负值得函数,常被用来衡量一个向量的大小。 常用向量范数 范数类型 计算公式 MATLAB调用 补充解释 L1范数L1范数 ∥x∥1=∑ni=1|xi|‖x‖1=∑i=1n|xi| norm(x,1) 向...

黄瓜与土豆
29分钟前
7
0
Vue视频播放器 vue-video-player

Vue视频播放器 vue-video-player 本篇主要记录一下 在 vue 项目中 如何使用 vue-video-player 来作为视频播放器,由于最近在做博客的 轻松一刻模块 所以拿这个尝试一下 在此纪录一下 以及遇到...

AskaJohnny
36分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部