JFinal使用技巧-Enjoy指令扩展eval指令动态化

话 不 多 说 ,直 接 上 石马 ~ 
需求来源:https://jfinal.com/feedback/8021
先自定义一个指令:EvalDirective

public class EvalDirective extends Directive {
    public void exec(Env env, Scope scope, Writer writer) {
        new Parser(env, new StringBuilder(//
        exprList.eval(scope).toString()),null)//
        .parse().exec(env, scope, writer);
    }
}

再测试:

public static void main(String[] args) {
    DruidPlugin dp = YunjiaowuConfig.getDruidPlugin();
    ActiveRecordPlugin arp = new ActiveRecordPlugin(dp);
    Engine engine = arp.getEngine();
    //注册指令
    engine.addDirective("eval", EvalDirective.class);
    dp.start();
    arp.start();
    try {
        String str = "select id from account where id = #para(id)";
        String sql = "select (#eval(str)) myId from account where id = #para(id2)";
        SqlKit sqlKit = Db.use().getConfig().getSqlKit();
        SqlPara sqlPara = sqlKit.getSqlParaByString(sql, //
            Kv.by("id", 1).set("id2", 2).set("str", str));
        System.out.println(sqlPara.toString());
    } finally {
        dp.stop();
    }
}

执行结果:
image.png

这个指令不光可以拼接SQL时参数当模板代码执行,做其他业务也可以用~ 

有参考价值就点个赞吧~

评论区

JFinal

2021-02-25 12:34

短短几行代码实现了指令动态化,赞

杜福忠

2021-02-25 14:34

@JFinal 😀 Enjoy Template Engine

SuperEric

2021-02-25 15:04

要输就输给追求

2021-02-25 17:49

强还是你强

zeroabc

2021-02-26 10:01

强还是你强

小徐同学

2021-02-26 14:34