# 从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 是接口的参数,通过:形式引用,接口调用时会传入这两个参数。

API

调试接口,并返回结果

API

# 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_;

另外,建议在请求参数中定义好分页参数,如:

API

# 返回首行

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

API

顶部