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群和一些爱智求真的小伙伴一起学习,成长。