jfinal sql 语句管理和动态生成

在上一小节,遗留了一个命名空间没有讲。这个知识点其实很好理解,就像包名的概念一样。接下来就让我们一起来熟悉一下#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));
     }

好了,亲爱的小伙伴们!今天的栗子已经举完了。其实程序这点事儿,还是得靠自己去摸索。恭喜你们又掌握了一些知识,又进步了一点,加油!



作者:葉糖糖
链接:https://www.jianshu.com/p/5733409457ef
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

猜你喜欢

转载自blog.csdn.net/u014756827/article/details/81202326