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 几乎不用拼接,或者只有少量拼接

2018-07-18 16:01

maven 项目不需要改动 default output folder

既然是 maven 项目,解决办法就极其简单了:
1:删掉所有文件与目录,只保留 src 目录以及 pom.xml 文件
2:按 maven 项目导入,让 eclipse 重新生成项目中的那些个配置

这类问题的原因有千百种,无非就是项目配置问题,搞定配置的办法就是重新来过

2018-07-18 15:59

输出指令输出时的精度完全取决于 Java 语言

所以,你得用 #number 指令来指定精度,这个在文档中有实例

2018-07-18 15:58

@威仔 你用的 sqlserver , 应该要配置它的方言:
arp.setDialect(new SqlServerDialect())

不要使用 AnsiSqlDialect,这个是为 jfinal 里面默认没有方言的数据库准备的

2018-07-18 15:56

@Didier 你写的就是对的,就是 #if (d_id != 0 ) ... #end

之所以不对,可能是别的原因

再说了,没看到任何异常,外人无法判断

2018-07-18 15:53

你自己的代码已经 getOutputStream() 一次,然后 renderJson("") 会调用 JsonRender.render(...) 方法,该方法中也会 getOutputStream() ,所以出现这个异常才是对的

避免的办法很简单,要么去掉你自己的 getOutputStream() , 要么去掉 renderJson()

我看到你的代码中还有一个 renderNull(), 为啥不在 renderNull() 后面 return 一下,避免后面的 renderJson("") 被调用

2018-07-18 09:17

@netwild 得改源码才行,但 jfinal 无法支持,因为要考虑兼容性