2018-07-19 11:46
@wang jfinal 的每个设计都会尽可能考虑学习成本
按照 JDK 的 DecimalFormat 规则来,学习成本必然是最低的,而且网上的 DecimalFormat 资源极多,这也免去了 jfinal 折腾这方面文档的事情
2018-07-18 18:06
@flash866 建议学一下 jfinal ext 来扩展,正好作者今天发布了新版本,参考一下它的 ModelExt 以及 base_model_template.jf:
https://github.com/E7du/jfinal-ext3/blob/master/src/main/java/com/jfinal/ext/plugin/activerecord/ModelExt.java
https://github.com/E7du/jfinal-ext3/blob/master/src/main/java/com/jfinal/ext/plugin/activerecord/base_model_template.jf
其中的 base_model_template.jf 仅仅是将 Model 改成 ModelExt ,极其简单,一定要用这种办法来扩展。 因为对于不同的应用,你可以扩展出针对该应用的很多方法,这样才有利于节省代码,提升效率
2018-07-18 17:26
@lveRen 看一下 jfinal weixin 2.1 中是否有这个功能,我记得是有的
2018-07-18 17:24
@112313 通过往 getSqlPara 方法中传入参数即可,表名可以通过 model._getTable().getName() 获取到
2018-07-18 17:23
@himans Generator 中有一个 setBaseModelTemplate(...) 可以指定生成 base model 的模板文件
你可以先将 com.jfinal.plugin.activerecord.generator 包下面原有的 base_model_template.jf 文件的内容复制出来,然后改改里面的 extends 后面的那个 Model 为你自己的 BaseModel,这样就实现了切换中间层的功能
记得搞定后回来分享一下: jfinal.com/share
2018-07-18 17:21
@Iwengogo jfinal 的 sql 管理功能是一大特色,用模板引擎来管理 sql 的方案,直接秒杀掉 mybatis 用 XML 管理 sql 的方案:
http://www.jfinal.com/doc/5-13
2018-07-18 17:17
@wang #number 这个指令的那个 pattern 参数,直接搜索关键字:DecimalFormat,规则就是 java 中的 DecimalFormat
2018-07-18 17:15
@威仔 生成器一样也可以配置方言:
generator.setDialect(new SqlServerDialect());
下载首页的 jfinal demo,里面的生成器就有这个配置
2018-07-18 16:13
@lveRen 自己仿照现有 API 写一个也很容易,其就是找好参数,然后发个请求
2018-07-18 16:12
interceptor.add(...) 方法与 interceptor.addGlobalActionInterceptor(...) 这两个方法在功能上是完全一样的
interceptor.add(...) 这个方法本应该不存在,只是为了兼容历史版本才没有去掉
所以解决办法就很清楚了:将你代码中的 interceptor.addGlobalActionInterceptor(...) 与 interceptor.add(...) 这两行代码交换下位置即可
原因是拦截器的拦截是有先后次序的,先添加的先拦截,所以你的事务拦截器应该放在后面去,这样才能让回滚出于内层,内层再抛出异常时,正好是外层你希望的 ExceptionInterceptor 接手
2018-07-18 16:08
@himans 扩展一个中间层是最好的办法
大至上是:自建一个 public class BaseModel extends Model,然后所有原来继承 Model 的那些类改成继承 BaseModel,也就是改一下 BaseModelGenerator 生成器的模板中的那个类文件而已
在这个 BaseModel 中添加一些你认为很常用的方法
2018-07-18 16:05
@flash866 你的上个回复引出了我的上个回复中的 “还有很多别的考虑” 中的其中一种
假定增加一个 columns 参数或者方法来限定字段,你仍然也是要写字段的,然后再将这个与现在的 jfinal 方案对比一下:
Db.find("select clumns... from tableName where ....", ...);
对比之后,你发现你的方法只是少写了一个 tableName 而已,但用户是需要增加学习成本的,而原生的 sql 对于用户来说是固定的一次性成本,无论以后再来什么功能,也不需要增加成本
此外还有性能的原因,你的解决方案肯定无法避免字符串拼接,这个都是要分配内存的,而 jfinal 现有方案, sql 几乎不用拼接,或者只有少量拼接