实际开发过程中,由于业务原因导致可能需要or条件查询支持,例如在使用 HistoricProcessInstanceQuery、TaskInfoQuery等时,官方已经提供了OR条件。本文简单说明下or条件的基础用法
TaskInfoQuery.png HistoricProcessInstanceQuery.png如上两个截图是官方源码展示的说明;具体在代码中使用 是按照 or() 声明 条件开始。 endOr()声明条件结束
TaskQuery todoQuery = taskService.createTaskQuery()
.or() // or条件开始
.taskTenantIdLike(sendRequest.getTenantId()) // 此处由于个人业务原因,放了两个条件都是租户
.taskTenantId(RoleConstant.OLD_TENANT_ID)
.endOr() // or条件结束
.taskAssignee(sendRequest.getUserId()).active()
.includeProcessVariables().orderByTaskCreateTime().desc();
//分页查询数据
taskQuery.listPage(query.getCurrent(), query.getSize());
以上代码执行分页查询的SQL语句为:
SELECT
RES.*, VAR.ID_ AS VAR_ID_,
VAR.NAME_ AS VAR_NAME_,
VAR.TYPE_ AS VAR_TYPE_,
VAR.REV_ AS VAR_REV_,
VAR.PROC_INST_ID_ AS VAR_PROC_INST_ID_,
VAR.EXECUTION_ID_ AS VAR_EXECUTION_ID_,
VAR.TASK_ID_ AS VAR_TASK_ID_,
VAR.BYTEARRAY_ID_ AS VAR_BYTEARRAY_ID_,
VAR.DOUBLE_ AS VAR_DOUBLE_,
VAR.TEXT_ AS VAR_TEXT_,
VAR.TEXT2_ AS VAR_TEXT2_,
VAR.LONG_ AS VAR_LONG_
FROM
ACT_RU_TASK RES
LEFT OUTER JOIN ACT_RU_VARIABLE VAR ON RES.PROC_INST_ID_ = VAR.EXECUTION_ID_
WHERE
RES.ASSIGNEE_ = ?
AND RES.SUSPENSION_STATE_ = 1
AND (
RES.TENANT_ID_ = ?
OR RES.TENANT_ID_ LIKE ?
)
ORDER BY
RES.CREATE_TIME_ DESC
可以看到 这个和我代码期望了 or条件是一样的。
image.png
如果觉得本文对大家有帮助,欢迎点个赞;如果文章中有错误的地方,欢迎大家批评指正;
原创文章,转载注明出处,谢谢;
网友评论