2017-05-25 18:29
想起来一点点,再补充一下:以前 3.0 版本的用法,getSql(...) 可传入 Map、Model 参数,例如:
String sql = Db.getSql(key, map);
Db.find(sql, p1, p2, ..., pn)
也就是说,老用法通常要传两次参数,一次用于生成 sql,一次用于查询,在查询时用纯 sql 的情况非常少,通常是需要 Object... paras 参数的
而 3.1 之所以会去掉 getSql(...) 对于 Map、Model 的参数支持,是因为使用 getSqlPara(...) 只需要传一次参数,即可完成生成 sql,以及 para 的构建,例如:
SqlPara sp = Db.getSqlPara(key, map);
Db.find(sp);
以上用法,只需要传入一个 map 就可以构建 sql 与其 Object... paras,所以是 3.1 鼓励的用法
通过对比, 3.1 的用法明显比 3.0 的用法简单快捷,而且 3.1 的用法可完全覆盖掉 3.0 的功能,升级起来也很容易
此外,3.1 的用法还能避免掉 3.0 的线程安全问题,一举多得。在这个问题的设计上是经过极为深入的考虑与实践的。建议你在升级到 3.1 的时候,再多走那么一小步,会发现新用法非常好用
2017-05-25 18:12
3.0 版本中的 Model.getSql(key) 方法内部传入 this.attrs 的用法,完全可以被 3.1 版本的下面方法来代替:
SqlPara sqlPara = Model.getSqlPara(key, this);
在查询的时候这样:
model.find(sqlPara);
所以升级的改动其实很小,而且必然可以升级,就是添加一个 this 参,然后 String 接收参数改为 SqlPara 接收参数,查询时直接扔 SqlPara 对象进去
而老版本 3.0 得到的是一个 String 型的 sql,在查询的时候这样仍然要传入参数:
model.find(sql, p1, p2, ..., pn);
可见老版本的用法并不比新版本简洁,新版本的 getSqlPara 方法功能还更加灵活强大,见下面的说明
新版本的用法有如下好处:
1:避免了 find(sql, p1, p2, ..., pn) 时传参,而是直接在 getSqlPara 时传参,因为在 getSqlPara 时传参功能更加灵活与强大,例如支持 #para(int) 的用法
2:避免了 dao 对象的线程安全问题
3:避免 Model、Db 中的 getSql(...) 系列方法数量的膨胀
4:还有其它一些好处,刚刚被一些事情打断,一时忘记了
2017-05-25 14:21
@要输就输给追求 新版本的 cos 不仅可以支持 input 的 name 重复,而且支持上传的文件是有序的,而且在上传文件长度超过范围时抛出 ExceededSizeException,便于应用程序中捕获处理
2017-05-25 14:19
@要输就输给追求 这个不需要在 jfinal 3.1 中解决,而是要在 cos 这个第三方中解决,刚刚已经更新了这个 cos 第三方,并上传到了 maven 中心库,maven 升级方式:
groupId:com.jfinal
artifactId:cos
version:2017.5