可否考虑对model增加where()方法?

jfinal目前对于查询还是略微有点麻烦,需要写一条完整的sql语句,但是大多数情况下,其实并没有很复杂的查询。能否在model中增加一个jfinal内置的where()方法,比如 :   someModel.where("name=?",getPara("name")).find() ; 这样的用法,可以大大缩短sql长度。

评论区

JFinal

2018-07-16 18:08

如果添加了这个功能,就会出现更多的 select *, 这种用法是不提倡的,甚至在大公司有代码规范会禁止使用 select *

目前我是建议你自建一个 public class BaseModel extends Model,然后所有原来继承 Model 的那些类改成继承 BaseModel

在这个 BaseModel 中添加一些你认为很要的方法,例如 where 方法

记得一定要分享出来

添加这个方法很简单, tableName 可以通过 _getTable().getName() 得到,然后大致就是下面这样了:
public List M where(...) {
String sql = "select * from " + _getTable().getName();
// 在些拼接查询条件
return find(sql, paras);
}

JFinal

2018-07-16 18:09

当然, jfinal 默认没有提供 where 方法,还有很多别的考虑,最近很忙,在此就不赘述了

flash866

2018-07-18 15:01

@JFinal 好的,其实可以增加一个columns()方法来限定字段。大神不用回复了,忙吧。

JFinal

2018-07-18 16:05

@flash866 你的上个回复引出了我的上个回复中的 “还有很多别的考虑” 中的其中一种

假定增加一个 columns 参数或者方法来限定字段,你仍然也是要写字段的,然后再将这个与现在的 jfinal 方案对比一下:
Db.find("select clumns... from tableName where ....", ...);

对比之后,你发现你的方法只是少写了一个 tableName 而已,但用户是需要增加学习成本的,而原生的 sql 对于用户来说是固定的一次性成本,无论以后再来什么功能,也不需要增加成本

此外还有性能的原因,你的解决方案肯定无法避免字符串拼接,这个都是要分配内存的,而 jfinal 现有方案, sql 几乎不用拼接,或者只有少量拼接

热门反馈

扫码入社