新手请教关于操作数据库

本人新手,对JFinal在数据库的操作上有很多困惑的地方:

  1. 直接在MODEL里,可以直接find(还有好多方法,举例这个),那它与DAO里的find,还有Db里的find有什么不同呢?

  2. 我看了一些内容说不能直接使用更新,只能new。又提到Db+record模式可以解决。但我看不出有什么不同。我使用DAO也是要先取再update,使用Db也是一样要取再update?

    望波总或高手回答下。多谢!

评论区

JFinal

2017-04-18 17:19

一、Model
1:model 采用的是 active record 模式,该模式的核心是一个 model 对象唯一对应一条数据表记录,对应的机制是采用主键

2:由于 model 对象与数据表记录通过主键建立了唯一对应的关系,所以可以提供 model.update()、model.delete() 这种操作方式

3:model 内部可以创建额外的方法完成一定的逻辑,还可以用生成器生成 getter、setter 方法,对于属性的读写提供了便利

二、Db + Record
1:Record 对象并没有与某个数据表建立关联,而是在使用的时候,使用参数临时与某个表建立联系,例如: Db.save("user", new Record().set("userName", "james");

2:由于某个 Model 对象与条记录建立了关联,所以对于需要批量更新数据表数据的操作不太方便,例如更新 account 表中的 cash 字段,让每条记录全是增长 10 块钱的用法:
Db.update("update account set cash = cash + 10")

在大部分情况下尽量使用 Model 可以搞定需求,当 Model 搞不定时,例如需要批量更新、删除时,用一下 Db + Record 模式作为补充

ihss23

2017-04-19 10:38

@JFinal,多谢波总回复。看了你的回复我的确清晰了很多。就是我们的心里要有这两个模式的区分。而同时,在实际使用中,我们可以两个模式同时用,在一个类里同时写,按实际的业务需求,使用合适的模式来对数据库的操作。是这样理解的吧?

JFinal

2017-04-19 10:45

@ihss23 可以这样理解,随着使用时间的推移,理解会更深入,我前面讲的是基本区别,还有其它一些以后慢慢体会,例如 Model 中可以写与本 model 逻辑有关的一些代码,而 Record 是固定的一个类文件,不能在里面添加东西

ihss23

2017-04-19 11:08

@JFinal 再次感谢波总!

JFinal

2017-04-19 11:22

@ihss23 感谢你的支持

热门反馈

扫码入社