玖叶教程网

前端编程开发入门

0行代码写服务之,利用markdown实现自定义sql动态模板

通过markdown实现自定义动态sql拼接,实现通过sql配置完成接口开发发布

整体框架还是依据0行代码写服务的框架不清楚的看一下前几篇文章,这里我们为了满足复杂查询利用动态sql拼接的方式去实现具体实现如下:

首先来看一下自定义的markdown sql文件:test.md

文件真实内容如下:

第一步配置sql文件:

首先我们根据“;”定义每一条sql的结尾,用“===”分割sql的标记名称和具体执行的sql,用“@”符号来确定出动态sql的部位,根据传的值是否为空去动态拼接sql

selectlike

===

select * from test where 1=1

@times

and times = #times#

@name

and instr(name, #name#)

selectpage

===

select * from test where 1=1

@times

and times = #times#

@name

and name = #name#

delete

===

delete from test where 1=1

@times

and times = #times#

@name

and name = #name#

@id

and id = #id#;

myselect

===

select p.province_name,p.province_id,c.city_id,c.city_name,c.lat,c.lon from b_china_provice p LEFT JOIN b_china_city c on p.province_id=c.province_id where 1=1

@name

and p.province_name in(#name#)

第二步接口服务注册:

为了和框架保持一致性,表结构完全采用以前框架的结构,我们把sql文件写好之后在这个表里面配置需要执行的方法名如“moreConditionsSearch”,这个参数是暴露给前端的参数,他对应的sqls为"test.selectlike",也就是我们后台需要执行的sql,test是sql文件的名称,selectlike是我们对应test.md文件中具体要执行的那一条sql

第三步调用已配置通用化的数据服务接口:

以上两步配置我们的通用接口地址如下:

/commapi?m=q&k=moreConditionsSearch

这个接口对应的动态sql为

selectlike

===

select * from test where 1=1

@times

and times = #times#

@name

and instr(name, #name#)

也就是这个sql里可以传递的参数有timesname。那么我们分别执行以下看一下结果

1、不带参数:/commapi?m=q&k=moreConditionsSearch

2.携带一个参数name;/commapi?m=q&k=moreConditionsSearch&name=王

3.携带一个参数name和times两个参数;

/commapi?m=q&k=moreConditionsSearch&name=王&times=3

4.携带一个参数name和times两个参数并且加上分页;

/commapi?m=q&k=moreConditionsSearch&name=王&times=3&page=1&size=1

如果此处携带分页参数,则实际执行sql为加了分页后的,这里打印打印的执行sql并不是最终的执行sql 。最终的执行sql会变成"select * from test where 1=1 and times = 3 and instr(name, '王') limit 1,1"

5.只携带分页参数;

/commapi?m=q&k=moreConditionsSearch&page=1&size=1

复杂sql:动态拼接参数:

问同时要了一个比较长的sql如下

这个sql是个查询的,我们可以看到这里有两个参数我们做成动态传入:

最终解析结果如下:

下片文章演示删除和修改相关执行测试结果,新增动态接口正在开发中,欢迎讨论交流

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言