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

作者:无名    it人知识库   2020-09-14 00:00:00

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




it人知识库 原文地址:https://m.itpeo.net/15310/3710228.html

Tag:简单一下静态对象误用问题



我要分享:

  • 微信
  • QQ好友
  • QQ空间
  • 新浪微博


热门推荐

职业生涯第二年回顾(2011.2~2012.2)

职业生涯第二年回顾(2011.2~2012.2)

 算不上什么工作总结和技术总结,只是大致回顾这1年记忆中的事情。    一... ...

使用import简化spring的配置文件 (转载)

使用import简化spring的配置文件 (转载)

Spring中用import导入配置文件 原文地址:使用import简化spring的配置文件 (转载)作者:瓦砾... ...

每天十分钟,十二天入门Python(十)

每天十分钟,十二天入门Python(十)

# __str__() class Dog(object):     de... ...

JQuery:deferred对象的方法

JQuery:deferred对象的方法

(1) $.Deferred() 生成一个deferred对象。 (2) deferred.done() 指... ...

Maven的安装及与eclipse或MyEclipse的关联

Maven的安装及与eclipse或MyEclipse的关联

apache-Maven的下载就不说了,其安装与JDK的安装几乎类似。当然使用Maven的前提是已经安装好了JD... ...

怎么在HiWork中注册团队及添加成员

怎么在HiWork中注册团队及添加成员

周三,天气较热,各位注意身体,多饮水。 使用HiWork,首先要进行团队创建以及成员添加,这样才能愉快地... ...

linux wineQQ与win7QQ共用聊天记录

linux wineQQ与win7QQ共用聊天记录

首先挂载win7硬盘,挂载方法就不介绍了。 然后点开QQ的设置  -> 文件管理 -&g... ...

Clustrix Sierra关系数据库集群

Clustrix Sierra关系数据库集群

Clustrix的Sierra数据库集群引擎是一个share-nothing架构的可伸缩关系数据库集群。官... ...

Android圆了Linux桌面之梦

Android圆了Linux桌面之梦

Google开源主管Chris DiBona在采访中称,Android圆了Linux桌面之梦。 DiBona表示,... ...

系统管理构架

系统管理构架

1. 登录系统(VPN+ssh)。 为了保护系统,登录系统应该有审计,有记录。并且,普通用户只不能在登录... ...

swing 消息框 joptionpane

swing 消息框 joptionpane

4.消息弹出窗口 import javax.swing.JFrame; import javax.sw... ...

swing 消息框 joptionpane

swing 消息框 joptionpane

1.使用JOptionPane提示用户确认 import javax.swing.JOptionPan... ...

Quartz之SimpleTrigger

Quartz之SimpleTrigger

SimpleTrigger: 它只能用于指定任务在一个特定时间内运行,可指定任务的重复(时间,次数)与间隔(时间,次数)... ...

人力资源主管的素质要求

人力资源主管的素质要求

作者:佚名 现代企业的人力资源管理的总趋势是以人为本,本着认识人、尊重人、开发人、激励人的观念,把人看成是一种... ...

C++xml文件操作 CMarkup学习方法说明

C++xml文件操作 CMarkup学习方法说明

   最近正在研究C++下的XML分析工具CMarkup。初次和XML相遇是基于C#对XML的... ...

JS文字滚动效果

JS文字滚动效果

没什么技术难度,主要是Array对象的push()和shift()方法的调用。 一般的实现方法,即直接分别在id为st... ...

django框架

django框架

 django框架   本篇主要讲解一些基本的操作: 创建dja... ...

ASP.NET开发资源

ASP.NET开发资源

 Asp.Net今天是一个WEB开发广泛使用的框架,主要是使用CSS,HTML和JavaScript的。... ...

解析BMP格式文件,并实现重绘

解析BMP格式文件,并实现重绘

         &nb... ...

SQL Server 2012新增的内置函数

SQL Server 2012新增的内置函数

简介     SQL Server2012新增了一些内置函数来让开发人员使用起来更... ...

最新IT资讯

必填

◎已有 0 人评论


电脑版

版权所有:IT人知识库 m.itpeo.net

返回顶部

本网站部分内容来自互联网,版权归原作者所有,文章内容仅代表原作者个人观点,如有侵权请联系我们删除