问一个低端的 CRUD 的问题

2014-07-17 00:52:30 +08:00
 mulog
一个困扰了我很久的问题

假定不使用ORM

比如说有一个Person,然后有age,name,sex,salary,job...等等一堆属性
然后做update的时候 能否给定任意个数个属性呢?
比如说既可以单独update任一个属性,也可以同时update两个(比如给定参数age=33&salary=29999), N个。。
后台该如何实现?

我能想到的办法就是 写一句set所有属性的sql。先把要update的这条记录读出来。请求里有给定的属性,使用请求里给的值,否则使用原记录的值。

但是总是感觉这样无端端多读一次数据库有点浪费,请问是否有更好的办法?
2856 次点击
所在节点    程序员
5 条回复
fredcc
2014-07-17 01:27:27 +08:00
根据属性情况动态合成update sql呗。
非必须不读取,这是习惯吧
manhere
2014-07-17 01:40:54 +08:00
字段都有默认值的情况下,没问题
zeayes
2014-07-17 07:20:20 +08:00
update前把需要更新的属性赋上新值就可以了,sql语句update除了主键外的所有字段,这些字段的值从对象里面获取。
loading
2014-07-17 08:53:28 +08:00
目前我还是使用判断post内容然后拼接sql语句的方式,虽然加了防注入的代码,但实现还是不优雅!


@zeayes 从对象里取的话,也就是有数据库读取的操作吧!例如 age 不需要更新,但你update语句里要写出来,原来的数值必须要select读取出来先。
zeayes
2014-07-17 11:34:30 +08:00
@loading 你的意思是,不做查询,直接通过主键更新某些字段?

如果是这样的话,那就只有自己根据需要更新的字段拼SQL了。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/123040

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX