对于findFirst方法的讨论

M findFirst(String sqlObject... paras) {
    List<M> result = .find(sqlparas)result.size() > ? (Model)result.get() : }

在jfinal的持久层中,获取单个数据,官方只提供了一个findFirst方法,当然这个名称没有什么问题,因为从字面意思就是取第一个的意思。但是我建议还是需要提供一个类似findOne的方法,用于【严格】的取一条数据。

我的观点是:既然开发者已经选择了获取一条数据,那么应该给开发者一个选择空间,到底是想取第一条,还是想取唯一一条,如果想取唯一一条,那么查询出多个的时候就应该抛出异常,而不是使用findFirst方法获取第一个。如果所有场景都使用findFirst而不抛出异常,则会造成数据问题。

评论区

maxwade

2019-10-04 07:05

自己写一个吧

lyh061619

2019-10-04 11:31

设计已经给开发者很多选择空间,结合sql语句用,我们者知道查数据库数据,想要什么数据只要正确编写sql语句就可以,这也是其设计特点,极薄封装,灵活使用sql语句优势,比如:
根据ID查询唯一一条记录::var user = Db.findFirst("select*from user where id =? limit 1", 1);
查第一条记录:var user = Db.findFirst("select * from test_limit limit 1");
查最后一条记录: var user = Db.findFirst("select * from test_limit order by id DESC limit 1");
以上就是具体的使用经验。

小99

2019-10-07 20:05

@maxwade 嗯,是自己写的,哈哈

小99

2019-10-07 20:09

@lyh061619 嗯,对,对于开发者知道自己想要什么,写sql是最直接的方法,只是想到了这个点,在设计上其实还是希望官方能出一个严格检查一条数据的方法^_^

JFinal

2019-10-10 14:52

@小99 想法有一定道理,但 findOne 也比较容易让用户与 findFirst 联系起来,增加辩别成本

如果添加 findOne , 那么用户要搞清楚 findOne 与 findFirst 的联系与区别,是需要学习成本的

或许改成别的方法名更好,如果你想到好名字,可以在这里继续反馈

小99

2019-10-14 23:02

@JFinal 不如叫findUnique

JFinal

2019-10-14 23:06

@小99 这名字还不错

热门反馈

扫码入社