JFinal3.0快速上手,sql管理与动态生成下(二十八)

首先要感谢小徐同学南63同学,因为有你们的帮助和督促才有了此文的产出。衷心的感谢二位,还有其他的小伙伴们!

在上一小节,遗留了一个命名空间没有讲。这个知识点其实很好理解,就像包名的概念一样。接下来就让我们一起来熟悉一下#namespace指令的用法。

因为#namespace的存在,在程序中可以将命名相同的sql标识区分开。有点类似现实生活中两个重名的同学一样,可以通过他们在教室的坐位来区分谁是谁一样。也许这里例子有点不恰当,但是聪明的你应该明白了。接下来,请看代码。

1、sql文件中的代码

#namespace("sugar")
    #sql("findUserList")
      select * from t_user where id=#para(id) and pwd=#para(pwd)
    #end
#end

2、服务端java代码

细心的小伙伴已经知道该如何在java代码调用,是的没错,就如何所看到的一样。在#namespace的sql调用只需要通过空间名.sql标识来调用。注意空间名和sql标识中的点号(操作符)千万不要忘记写或写错了,否则会出现纰漏。

     public void index(){
         //设置查询参数
         Kv cond= Kv.by("id",3).set("pwd",345678);
         //封装查询参数并返回sql
         SqlPara sqlpara=Db.getSqlPara("sugar.findUserList",cond);
         //执行查询
         Db.find(sqlpara);
         //输出查询结果
         renderJson(Db.find(sqlpara));
     }

一、书山有路勤为径

关于sql代码高阶用法,其实也是很简单。只是结合之前学习到的模板指令一起处理复杂的sql。这些小伙伴们可以自行摸索,今天就简单的介绍一个简单的使用方法。

1、sql文件中的代码
这是根据之前的代码改造的 一个sql,其作用并未发生改变,只是更加灵活一些了。没有改造之前的sql是必须要传参数,改造之后的sql可以不传参数。改造之后的sql使用#for()指令来迭代参数,根据参数的索引来拼接sql。有经验的老司机可以看出来,那是一个三元表达式,如果参数的索引是0,那就使用where拼接参数,如果不是第一个那就使用and,然后输出key和value。

#namespace("sugar")
    #sql("findUserList")
      select * from t_user
      #for(x:cond)
        #(for.index == 0 ? "where" : "and") #(x.key) #para(x.value)
      #end
    #end
#end

2、服务端java代码

调用的方法大体和之前的一样,但是还是有细微的差距。那就是在Db.getSqlPara()方法的第二个参数上,在这里又将参数进行了一点小处理。其含义就是为了让模板引擎能够顺利的找到要去解析的sql参数。

     public void index(){
         //设置查询参数
         Kv cond= Kv.by("id=",3).set("pwd=",345678);
         //封装查询参数并返回sql
         SqlPara sqlpara =Db.getSqlPara("sugar.findUserList",Kv.by("cond",cond));
         //执行查询
         Db.find(sqlpara);
         //输出查询结果
         renderJson(Db.find(sqlpara));
     }

好了,亲爱的小伙伴们!今天的栗子已经举完了。其实程序这点事儿,还是得靠自己去摸索。恭喜你们又掌握了一些知识,又进步了一点,加油!
PS:有需要的小伙伴,可以加入qq群和一些爱智求真的小伙伴一起学习,成长。

《JFinal3.0快速上手,sql管理与动态生成下(二十八)》 qq群二维码

    原文作者:葉糖糖
    原文地址: https://www.jianshu.com/p/5733409457ef
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞