statement.md 4.3 KB

语法

1、JPQL语法

查询语句支持JPA JPQL语句,如下面的语句从系统表Task中获取待办:

SELECT o FROM Task o WHERE o.person = :person

JPQL JPQL官网:https://www.objectdb.com/java/jpa/query/jpql/structure
中文简介:https://www.codercto.com/a/4338.html

2、原生SQL语法

在v8.0及以后版本中,查询语句支持原生的SQL 语法,如下面的语句从系统表Task中获取待办:

SELECT * FROM Task WHERE person = :person

SQL w3schoole网站:https://www.w3schools.com/sql/default.asp
中文网站:https://www.runoob.com/sql/sql-tutorial.html

3、差异

差异项 JPQL SQL 说明
系统表名 Task TaskCompleted Read ReadCompleted Work WorkCompleted Review Document PP_C_TASK PP_C_TASKCOMPLETED PP_C_READ PP_C_READCOMPLETED PP_C_WORK PP_C_WORKCOMPLETED PP_C_REVIEW CMS_DOCUMENT 待办已办 待阅 已阅 流程实例 已完成流程实例 可阅读 内容管理文档
数据表名(自建表) TableName QRY_DYN_TABLENAME 假如创建数据表设置的名称为“TableName”,则SQL取的名称为 "QRYDYN"前缀加名称的大写。
字段名 id xid 字段以id为例,SQL的字段为"x"前缀加字段名。
SELECT o FROM Task o WHERE o.person = '张三'SELECT o FROM Task o WHERE o.person = "张三" SELECT * FROM PP_C_TASK WHERE person = '张三' JPQL的值可以使用单引号和双引号,SQL只能使用单引号。建议都使用单引号。

where子句传参

1、用冒号动态传参

查询语句中的where语句的值可以使用json传入,如:
查询语句的设计为 :

select o from tableName o where o.name=:n

在调用查询语句服务的时候传入 json:

{
    "n" : "zhangsan"
}

最终系统在后台根据这些设计拼接成为如下语句:

select o from tableName o where o.name='zhangsan'

如下图所示:
用冒号动态传参 了解JPQL语句动态传参可以点击链接查看:https://www.objectdb.com/java/jpa/query/parameter

2、用问号和数字动态传参

在V8.0中,平台支持用问号加数字的形式来传where语句的值,作用和冒号动态传参类似。,如:
查询语句的设计为 :

select o from tableName o where o.name= ?1

在调用查询语句服务的时候传入 json:

{
    "?1" : "zhangsan"
}

最终系统在后台根据这些设计拼接成为如下语句:

select o from tableName o where o.name='zhangsan'

如下图所示:
用问号和数字动态传参

3、默认参数

系统中有一些默认参数,对这些默认参数,系统会自动赋值。

默认参数 含义
person 当前人
identityList 当前人身份列表
unitList 当前人所在直接组织
unitAllList 当前人所在所有组织
groupList 当前人所在群组
roleList 当前人拥有的角色

如有如下语句:

select o from Task o where o.person = :person

参数:person为当前人,
在v8.0之前,外部传入参数 {person: ""}即可;
在v8.0之后,系统将自动解析这些默认参数,不需要再传入。
如当前人是张三@zhangsan@P,系统解析后自动拼接如下:

select o from Task o where o.person = "张三@zhangsan@P"

其他注意事项

1、日期格式的写法

在sql中,日期格式使用文本即可,如 :"2019-12-31", "23:59:59", "2020-01-03 13:59:59"。
在jpql中,对日期格式有特殊的写法,格式如下:
Date - {d 'yyyy-mm-dd'} - for example: {d '2019-12-31'}
Time - {t 'hh:mm:ss'} - for example: {t '23:59:59'}
Timestamp(DateTime) - {ts 'yyyy-mm-dd hh:mm:ss'} - for example: {ts '2020-01-03 13:59:59'}
示例如下图:
日期格式

2、like的写法

如果运算符用的是 like,模糊查询,值为 "%{value}%"。