Jfinal 3.1 怎么使用IStringSource

之前获取sql  shi是这样的:activeRecordPlugin.setBaseSqlTemplatePath(PathKit.getRootClassPath()); activeRecordPlugin.addSqlTemplate("sql/demo.sql");

sql放在jar包中 用现在的IStringSource获取sql  该如何写啊?

评论区

JFinal

2017-08-19 11:57

jfinal 3.2 已添加了从 class path 与 jar 包中读模板文件的功能,只需要添加如下一行代码即可:
activeRecordPlugin.getEngine().setSourceFactory(new ClassPathSourceFactory());

从 jfinal 3.1 升到 3.2 是完全不需要犹豫的,极度平滑,只要注意两点:
1:IStringSource 改名为了 ISource
2:Ret 类中的 isOk/isFail 改成了使用 state
如果你的项目根本不涉及上述两项,换个 jar 就升级完成

JFinal

2017-08-19 11:58

补充一点,ClassPathSource 支持从 class path 与 jar 包读取模板文件,优先从 class path 下找模板,找不到则去 jar 中去找

在使用 ClassPathSourceFactory 时,注意 engine.setBaseTemplatePath(null) 最好设置成为 null 值

JFinal

2017-08-19 12:00

最后,ISource 的使用参考一下 FileSource、StringSource、ClassPathSource,照猫画虎就可以了

fengting

2017-08-19 12:21

我刚才按照您的方法试了下,提示我sql文件找不到的。我现在项目情况是这样的。我要把所有的sql文件放在xx_core.jar 下的resources 下面 。我现在按照你的提示是这样写的:
arp.getEngine().setSourceFactory(new ClassPathSourceFactory());
arp.addSqlTemplate("sql/system.sql");
但是这样还是读取不到system.sql文件。另外 我的模板引擎用的是freemarker、我并没有设置engine.setBaseTemplatePath(null) 。这个有影响吗?

fengting

2017-08-19 12:35

问题解决了 上面的写法可以的。原因是我在resources下的sql文件没有编译到classes下面。谢谢波总!!!

JFinal

2017-08-19 12:41

@fengting sql 管理功能里面的 Engine 对象与 web 层的 Engine 对象是完全独立运作的,所以不会影响你目前在 web 层的 freemarker

即便是你 web 层用的是 freemarker,但同时又希望在 web 层混用 jfinal template engine 也完全没问题, jfinal 天然就支持多模板混合使用,只需要调用各自的 renderXxx 方法即可,例如 renderJsp、renderTemplate、renderFreemaker

fengting

2017-08-19 13:10

好的。谢谢波总!

fengting

2017-08-19 14:09

@JFinal 波总 顺便在问一下。现在有格式化sql 的功能吗?想去掉sql模板中的换行符。

fengting

2017-08-19 14:21

@JFinal 波总 升级3.2之后 为什么 Holder.ORDER_BY_PATTERN.matcher(sql).replaceAll("")会有这个。。我的sql语句中包含order by ,执行这个之后就把我的order by 替换了。就会报错的

热门反馈

扫码入社