请问sql模板如何嵌套?

工程分为多个模块,计划每个模块都想有自己的where sql定义,find和list sql里面都需要用到公用的where,请问要怎么处理?
#namespace("core")
    #where("module")
      ###代码    #end
    
    #sql("find");
        ###代码
        #@where("module")
    #end
    
    #sql("list");
        ###代码
        #@where("module")
    #end
#end


评论区

杜福忠

2020-08-11 17:22

Enjoy SQL 模板
8、#define 指令
https://jfinal.com/doc/6-4

杜福忠

2020-08-11 17:25

#define where(data)
where XXX
#end

JFinal

2020-08-11 18:58

在不同 sql 模板中进行定义就可以了 #define where()

我估计你的 #where() 函数有一部分功能是相同的,或许可以通过传入不同的参数来区分内部逻辑,只定义一个 where

Dyci

2020-08-12 08:28

@JFinal 我的想法是,根据每张表生成对应的查询条件,每个where不一样,但是又想和#sql一样用到namespace,效果和mybatis的sql引用类似

Dyci

2020-08-12 08:33

@杜福忠 感谢你的回复,我想要的效果类似mybatis的sql引用,需要有namespace的概念,把上面的core,改成user,每张表都有对应自己的查询条件

久伴轻尘

2020-08-12 08:57

@Dyci 我这边有个多模块的实现,不知道是不是你想要的
引入模块中的所有sql
https://gitee.com/jbqc/future-template-server/blob/master/future-org/src/main/resources/future-org/index.sql

这里面共用了wheres
https://gitee.com/jbqc/future-template-server/blob/master/future-org/src/main/resources/future-org/sql/user.sql

杜福忠

2020-08-12 09:03

@Dyci 每个表都简单封一下,那还不如统一封装一下了,比如: https://gitee.com/yun_final/JFinal-API/blob/master/src/main/resources/sql/common.sql

根据数据库表名生成也是可以的,可以读一下表字典生成器的代码,做个SQL生成器就可以了

Dyci

2020-08-12 09:25

@久伴轻尘 非常感谢你的帮助,我最初的想法和你的设计一致,就是写起来没那么爽,所以才纠结这个问题,能不能直接接口namespace引用,这样就不会有定义或模板冲突

Dyci

2020-08-12 09:27

@杜福忠 感谢你的分享,这个思路有考虑过,jfinal作者文档中也有,我想要sql完全由sql模块控制,包括#(x.key)

杜福忠

2020-08-12 14:59

@Dyci 根据数据库表名表字段以及注释等生成 SQL模板文件就可以了。
具体代码可以参考:
https://gitee.com/-/ide/project/jfinal/jfinal/edit/master/-/src/main/java/com/jfinal/plugin/activerecord/generator/DataDictionaryGenerator.java

热门反馈

扫码入社