## 语法 ### 1、JPQL语法 查询语句支持JPA JPQL语句,如下面的语句从系统表Task中获取待办: ```sql SELECT o FROM Task o WHERE o.person = :person ``` ![JPQL](img/tutorial/statement/jpql.png) JPQL官网:[https://www.objectdb.com/java/jpa/query/jpql/structure](https://www.objectdb.com/java/jpa/query/jpql/structure)
中文简介:[https://www.codercto.com/a/4338.html](https://www.codercto.com/a/4338.html) ### 2、原生SQL语法 在v8.0及以后版本中,查询语句支持原生的SQL 语法,如下面的语句从系统表Task中获取待办: ```sql SELECT * FROM Task WHERE person = :person ``` ![SQL](img/tutorial/statement/sql.png) w3schoole网站:[https://www.w3schools.com/sql/default.asp](https://www.w3schools.com/sql/default.asp)
中文网站:[https://www.runoob.com/sql/sql-tutorial.html](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取的名称为 "QRY_DYN_"前缀加名称的大写。 | | 字段名 | 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传入,如:
查询语句的设计为 : ```sql select o from tableName o where o.name=:n ``` 在调用查询语句服务的时候传入 json: ```json { "n" : "zhangsan" } ``` 最终系统在后台根据这些设计拼接成为如下语句: ```sql select o from tableName o where o.name='zhangsan' ``` 如下图所示:
![用冒号动态传参](img/tutorial/statement/para1.png) 了解JPQL语句动态传参可以点击链接查看:https://www.objectdb.com/java/jpa/query/parameter ### 2、用问号和数字动态传参 在V8.0中,平台支持用问号加数字的形式来传where语句的值,作用和冒号动态传参类似。,如:
查询语句的设计为 : ```sql select o from tableName o where o.name= ?1 ``` 在调用查询语句服务的时候传入 json: ```json { "?1" : "zhangsan" } ``` 最终系统在后台根据这些设计拼接成为如下语句: ```sql select o from tableName o where o.name='zhangsan' ``` 如下图所示:
![用问号和数字动态传参](img/tutorial/statement/para2.png) ### 3、默认参数 系统中有一些默认参数,对这些默认参数,系统会自动赋值。 | **默认参数** | **含义** | | --- | --- | | person | 当前人 | | identityList | 当前人身份列表 | | unitList | 当前人所在直接组织 | | unitAllList | 当前人所在所有组织 | | groupList | 当前人所在群组 | | roleList | 当前人拥有的角色 | 如有如下语句: ```json select o from Task o where o.person = :person ``` 参数`:person`为当前人,
在v8.0之前,外部传入参数 {person: ""}即可;
在v8.0之后,系统将自动解析这些默认参数,不需要再传入。
如当前人是`张三@zhangsan@P`,系统解析后自动拼接如下: ```json 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'}
示例如下图:
![日期格式](img/tutorial/statement/datetime.png) ### 2、like的写法 如果运算符用的是 like,模糊查询,值为 "%{value}%"。