jfinal3.2-sql管理部分疑问

jfinal3.2中sql管理部分,namespace指令可以嵌套使用吗?

如:

#namespace("sys")

    #namespace("user")

        #sql("getByName")

            select t.* from t_sys_user t where t.user_name = #para(0)

        #end

    #end

#end


能用sys.user.getByName的方式获取sql吗?


没自己实验。。。请原谅我的懒

评论区

郎小四

2017-09-08 09:20

@jounzhang 请教下 JFinal框架如何配置可以访问WEB-INF下的html文件啊

杜福忠

2017-09-08 10:41

本周六9月9号晚9点,直播精通jfinal模板引擎
一次直播,彻底精通 jfinal 的 enjoy 模板引擎,错过将是很大损失,大家相互转告

杜福忠

2017-09-08 11:02

@杜福忠 加入俱乐部才能享受哦

JFinal

2017-09-08 14:11

namespace 不能嵌套,可以使用如下 key 值的形式实现多层的效果:
#namespace("aaa.bbb.ccc")

莫念

2017-09-08 23:52

@JFinal 如果sql文件在jar包中,在config该如何配置

JFinal

2017-09-09 00:05

@莫念 engine.setSourceFactory(new ClassPathSourceFactory()) 即可打完收工,在手册上有明确说明

jounzhang

2017-09-11 16:20

@JFinal 确实有一个需要嵌套的场景:sql包下面用于业务模块,sqltest包用于自动化测试前的数据初始化sql,本意是想在测试sql中增加前缀test,再按模块进行拆分。波总给出的方式虽然能解决,但是需要在每一个key前面带上模块的编码,下面开发人员有些抵触。能不能将namespace嵌套给支持了?

JFinal

2017-09-12 11:32

@jounzhang 按照 namspace 指令做一个自定义指令 MyNameSpaceDire,然后:
arp.getEngine().removeDirective("namesapce");
arp.getEngine().addDirective("namesapce", new MyNameSpaceDire());

应该很好做,在 MyNameSpaceDire 中判断一下是不是已经存在上层 namespace,如果存在则做一个字符串相加

jounzhang

2017-09-12 17:03

@JFinal 这个可行,只是又要自己动手了。。

jounzhang

2020-03-04 16:12

经过实践,namespace建议不要使用,直接在sql中使用aaa.bbb.ccc.ddd来标识sql,因为用了namespace后不利于编辑器搜索,比如namespace为user、role下都有sql的key叫list、update等,搜索list的时候,会出现一抹多的文件,根本达不到搜索的期望值,如果使用user.list方式,搜索user.list的搜索结果就很舒服了。

JFinal

2020-03-04 16:26

@jounzhang 直接在sql中使用aaa.bbb.ccc.ddd来标识sql 是一个既巧妙,又很简单有效的方法,超赞

这就好比 jfinal 路由中的 controllerKey 中可以包含 "/" 字符一样,虽然明面上是没有支持 namespace,但在实质上也支持了 namespace

JFinal

2020-03-04 16:27

@jounzhang 最后,再结合 #include 指令,按模块拆分的 sql 文件可以再整合到一起,当然,也可以多次调用 arp.addSqlTemplate 来添加,不需要 #include

jounzhang

2020-03-04 16:29

#include 进行文件拆分,是最佳实践

热门反馈

扫码入社