# 从SQL创建接口
假如我们要查询某时段签订的合同,我们可以通过 SQL 创建接口。仅仅支持 GET 和 POST 两种请求方式,主要用于查询操作。
接口创建完成后,需要配置对应的 SQL 语句。以下是一个简单查询 SQL 语句(H2数据库):
select * from contract where sign_date between cast(:start as date) and cast(:end as date)
其中 :start 和 :end 是接口的参数,通过:形式引用,接口调用时会传入这两个参数。

调试接口,并返回结果

# SQL高级语法
# SQL中使用上下文变量
上下文变量是指请求进来后,在SQL中可以引用的用户身份信息,时间等。具体参考如下:
:vars.user.id 当前用户ID
:vars.user.username 当前用户账号
:vars.user.name 当前用户姓名
:vars.tenant_id 当前租户ID
:vars.org.id 当前用户所属组织ID
:vars.org.name 当前用户所属组织名称
:vars.org.fullCode 当前用户所属组织全路径编码
:vars.now 当前时间
:vars.client.id 当前客户端ID
:vars.client.appId 当前客户端所属的应用ID
:vars.properties 当前用户口中属性对象,扩展的字段可以通过`:vars.properties.xxx`形式访问
# 动态命名参数
语法为{? ... },大括号里面为SQL,参考示例:
select * from table_name where 1=1 {?and name = :name or title = :title}
规则说明:
- 命名参数必须全部有值,才会执行大括号内的SQL语句块
- 命名参数可以有多个,但至少有一个
{?...}不能嵌套使用
假如 name 值为 n, title值为 t,则生成的SQL为:
select * from table_name where 1=1 and name = 'n' or title = 't'
假如 name 值为 n,title为空值,则生成的SQL为:
select * from table_name where 1=1
# 实现逻辑判断语法
框架支持 @if, @else, @end, @elseif 语法,参考示例:
@if(spel表达式) SQL @elseif(spel表达式) SQL @else SQL @end
规则说明:
- 每个条件块都必须以 @if, @else 或 @elseif 开头,并以 @end 结尾
- 括号中为 spel 表达式,可以使用命名参数作判断
参考示例:
如查询中会传入命名参数type,根据参数值判断查询条件,当type值不同查询条件也不同:
SELECT * FROM table_name where
@if(type == 1) type = '1'
@elseif(type == 2) type = '2'
@else type is null
@end
and code = 'demo'
当type为 1 时,最终执行的SQL为:
SELECT * FROM table_name where type = '1' and code = 'demo'
# 实现模糊查询语法
模糊查询可以使用like语法,参考示例:
SELECT * FROM table_name where name like concat('%', :name, '%')
# 分页SQL查询
勾选“自动分页”后, 框架接口内部会自动获取来自url的参数:page(第N页)、size(每页条数) 以及 total(返回总数)。
举个例子获取用户列表SQL:
select * from sec_user;
会变成:框架会自动在SQL语句中添加分页语句,
// 第一页 page=1 size=10
select * from sec_user limit 10;
// 第二页 page=2 size=10
select * from sec_user limit 10 offset 10;
当 total 参数为true时候,计算总数的SQL为:
select count(1) from (select * from sec_user) ct_;
另外,建议在请求参数中定义好分页参数,如:

# 返回首行
在 1.8.13 版本之后,支持“返回首行”功能,勾选后,框架会自动在SQL语句中添加limit 1,返回首行数据。
