烦恼一般都是想太多了。

0%

Activiti数据库表结构

公司有用到这个来做工作流的任务,一直不清楚,但做维护的话不能不明白,所以就搜索了一下。现在做记录。原文地址:https://blog.csdn.net/muzi1314_/article/details/78649496https://blog.csdn.net/romantichjwhjwhjw/article/details/40650671

Activiti-5.21数据字典

简介
# 前缀 描述
1 ACT\_RE_ RE表示Repository资源库,保存流程定义,模型等设计阶段的数据。
2 ACT\_RU_ RU表示Runtime运行时,保存流程实例,任务,变量等运行阶段的数据。
3 ACT\_HI_ HI表示History历史,保存历史实例,历史任务等流程历史数据。
4 ACT\_ID_ ID表示Identity身份,保存用户,群组,关系等组织机构相关数据。(Activiti中的组织机构过于简单,仅用于演示。)
5 ACT\_GE_ GE表示General通用,属于一些通用配置。
6 其他 ACT\_EVT_LOG和ACT\_PROCDEF_INFO没有按照规则来,两者分别属于HI和RE。
ACT\_RE_
ACT\_RU_
ACT\_HI_
数据库
# 表名 描述
1 ACT\_EVT_LOG 事件日志
2 ACT\_GE_BYTEARRY xml, png等二进制内容
3 ACT\_GE_PROPERTY 引擎版本信息
4 ACT\_HI_ACTINST 历史节点
5 ACT\_HI_ATTACHMENT 附件
6 ACT\_HI_COMMENT 评论
7 ACT\_HI_DETAIL 变更历史
8 ACT\_HI_IDENTITYLINK 历史参与者
9 ACT\_HI_PROCINST 历史流程实例
10 ACT\_HI_TASKINST 历史任务
11 ACT\_HI_VARINST 历史变量
12 ACT\_ID_GROUP 群组
13 ACT\_ID_INFO 用户的人员详细信息
14 ACT\_ID_MEMBERSHIP 用户与群组关系
15 ACT\_ID_USER 用户的基本信息
16 ACT\_PROCDEF_INFO 流程定义的动态变更信息
17 ACT\_RE_DEPLOYMENT 部署包
18 ACT\_RE_MODEL 模型(用于Web Designer)
19 ACT\_RE_PROCDEF 流程定义
20 ACT\_RE_EVENT_SUBSCR 事件监听
21 ACT\_RU_EXECUTION 流程实例与分支
22 ACT\_RU_IDENTITYLINK 参与者
23 ACT\_RU_JOB 异步作业
24 ACT\_RU_TASK 任务
25 ACT\_RU_VARIABLE 变量
ACT\_EVT_LOG
事件日志,默认不开启。
# 字段名 字段类型 长度 默认 描述 主键 外键
1 LOG_NR_ BIGINT 19     主键 自增  
2 TYPE_ VARCHAR 64     类型    
3 PROC_DEF_ID_ VARCHAR 64     流程定义    
4 PROC_INST_ID_ VARCHAR 64     流程实例    
5 EXECUTION_ID_ VARCHAR 64     执行    
6 TASK_ID_ VARCHAR 64     任务    
7 TIME_STAMP_ TIMESTAMP 19 NOT NULL CURRENT_TIMESTAMP 时间    
8 USER_ID_ VARCHAR 255     用户    
9 DATA_ LONGBLOB 2147483647     内容    
10 LOCK_OWNER_ VARCHAR 255     锁定节点    
11 LOCK_TIME_ TIMESTAMP 19     锁定时间    
12 IS_PROCESSED_ TINYINT 3   0 是否正在执行    
ACT\_GE_BYTEARRAY
所有二进制内容都会保存在这个表里,比如部署的process.bpmn20.xml, process.png, user.form, 附件,bean序列化为二进制的流程变量。
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 REV_ INT 10     乐观锁    
3 NAME_ VARCHAR 255     名称    
4 DEPLOYMENT_ID_ VARCHAR 64     部署   ACT\_RE_DEPLOYMENT
5 BYTES_ LONGBLOB 2147483647     内容    
6 GENERATED_ TINYINT 3     0为用户上传,1为系统自动生成,比如系统会自动根据xml生成png    
ACT\_GE_PROPERTY
全局参数,默认三个参数next.dbid,IdGenerator区间,schema.history,自动执行sql历史,schema.version,当前sql版本。
# 字段名 字段类型 长度 默认 描述 主键 外键
1 NAME_ VARCHAR 64     主键,参数名    
2 VALUE_ VARCHAR 300     参数值    
3 REV_ INT 10     乐观锁    
ACT\_HI_ACTINST
环节历史信息
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 PROC_DEF_ID_ VARCHAR 64 NOT NULL   流程定义    
3 PROC_INST_ID_ VARCHAR 64 NOT NULL   流程实例    
4 EXECUTION_ID_ VARCHAR 64 NOT NULL   执行    
5 ACT\_ID_ VARCHAR 255 NOT NULL   环节ID    
6 TASK_ID_ VARCHAR 64     任务    
7 CALL_PROC_INST_ID_ VARCHAR 64     父流程实例    
8 ACT\_NAME_ VARCHAR 255     环节名称    
9 ACT\_TYPE_ VARCHAR 255 NOT NULL   环节类型    
10 ASSIGNEE_ VARCHAR 255     负责人    
11 START_TIME_ DATETIME 19 NOT NULL   开始时间    
12 END_TIME_ DATETIME 19     结束时间    
13 DURATION_ BIGINT 19     持续时间    
14 TENANT_ID_ VARCHAR 255     多租户    
ACT\_HI_ATTACHMENT
附件
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 REV_ INT 10     乐观锁    
3 USER_ID_ VARCHAR 255     用户    
4 NAME_ VARCHAR 255     名称    
5 DESCRIPTION_ VARCHAR 4000     描述    
6 TYPE_ VARCHAR 255     类型    
7 TASK_ID_ VARCHAR 64     任务    
8 PROC_INST_ID_ VARCHAR 64     流程实例    
9 URL_ VARCHAR 4000     URL    
10 CONTENT_ID_ VARCHAR 64     内容 ACT\_GE_BYTEARRAY    
11 TIME_ DATETIME 19     时间    
ACT\_HI_COMMENT
评论
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 TYPE_ VARCHAR 255     类型,默认有event, comment理解成操作和评论。    
3 TIME_ DATETIME 19 NOT NULL   时间    
4 USER_ID_ VARCHAR 255     用户    
5 TASK_ID_ VARCHAR 64     任务    
6 PROC_INST_ID_ VARCHAR 64     流程实例    
7 ACTION_ VARCHAR 255     操作    
8 MESSAGE_ VARCHAR 4000     消息    
9 FULL_MSG_ LONGBLOB 2147483647     完整消息(字段更长)    
ACT\_HI_DETAIL
历史详情信息。
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 TYPE_ VARCHAR 255 NOT NULL   类型 FormProperty, VariableUpdate    
3 PROC_INST_ID_ VARCHAR 64     流程实例    
4 EXECUTION_ID_ VARCHAR 64     执行    
5 TASK_ID_ VARCHAR 64     任务    
6 ACT\_INST_ID_ VARCHAR 64     环节ID    
7 NAME_ VARCHAR 255 NOT NULL   名称    
8 VAR_TYPE_ VARCHAR 255     变量类型    
9 REV_ INT 10     乐观锁    
10 TIME_ DATETIME 19 NOT NULL   时间    
11 BYTEARRAY_ID_ VARCHAR 64     内容 ACT\_GE_BYTEARRAY    
12 DOUBLE_ DOUBLE 22     浮点值    
13 LONG_ BIGINT 19     长整型值    
14 TEXT_ VARCHAR 4000     文本值    
15 TEXT2_ VARCHAR 4000     jpa变量text存className,text2存id    
ACT\_HI_IDENTITYLINK
参与者历史
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 GROUP_ID_ VARCHAR 255     群组    
3 TYPE_ VARCHAR 255     类型,assignee, candidate, owner, starter, participant    
4 USER_ID_ VARCHAR 255     用户    
5 TASK_ID_ VARCHAR 64     任务    
6 PROC_INST_ID_ VARCHAR 64     流程实例    
ACT\_HI_PROCINST
流程实例历史
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 PROC_INST_ID_ VARCHAR 64 NOT NULL   流程实例    
3 BUSINESS_KEY_ VARCHAR 255     业务标识    
4 PROC_DEF_ID_ VARCHAR 64 NOT NULL   流程定义    
5 START_TIME_ DATETIME 19 NOT NULL   开始时间    
6 END_TIME_ DATETIME 19     结束时间    
7 DURATION_ BIGINT 19     持续时间    
8 START_USER_ID_ VARCHAR 255     流程发起人    
9 START_ACT\_ID_ VARCHAR 255     开始环节ID    
10 END_ACT\_ID_ VARCHAR 255     结束环节ID    
11 SUPER_PROCESS_INSTANCE_ID_ VARCHAR 64     父流程实例    
12 DELETE_REASON_ VARCHAR 4000     删除原因    
13 TENANT_ID_ VARCHAR 255     多租户    
14 NAME_ VARCHAR 255     名称    
ACT\_HI_TASKINST
任务历史
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 PROC_DEF_ID_ VARCHAR 64     流程定义    
3 TASK_DEF_KEY_ VARCHAR 255     任务定义标识(环节ID)    
4 PROC_INST_ID_ VARCHAR 64     流程实例    
5 EXECUTION_ID_ VARCHAR 64     执行    
6 NAME_ VARCHAR 255     名称    
7 PARENT_TASK_ID_ VARCHAR 64     父任务    
8 DESCRIPTION_ VARCHAR 4000     描述    
9 OWNER_ VARCHAR 255     被代理人    
10 ASSIGNEE_ VARCHAR 255     负责人    
11 START_TIME_ DATETIME 19 NOT NULL   开始时间    
12 CLAIM_TIME_ DATETIME 19     领取时间    
13 END_TIME_ DATETIME 19     结束时间    
14 DURATION_ BIGINT 19     持续时间    
15 DELETE_REASON_ VARCHAR 4000     删除原因    
16 PRIORITY_ INT 10     优先级    
17 DUE_DATE_ DATETIME 19     截止时间    
18 FORM_KEY_ VARCHAR 255     表单标识    
19 CATEGORY_ VARCHAR 255     分类    
20 TENANT_ID_ VARCHAR 255     多租户    
ACT\_HI_VARINST
变量历史
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 PROC_INST_ID_ VARCHAR 64     流程时间    
3 EXECUTION_ID_ VARCHAR 64     执行    
4 TASK_ID_ VARCHAR 64     任务    
5 NAME_ VARCHAR 255 NOT NULL   名称    
6 VAR_TYPE_ VARCHAR 100     类型    
7 REV_ INT 10     乐观锁    
8 BYTEARRAY_ID_ VARCHAR 64     内容 ACT\_GE_BYTEARRAY    
9 DOUBLE_ DOUBLE 22     浮点值    
10 LONG_ BIGINT 19     长整数值    
11 TEXT_ VARCHAR 4000     文本值    
12 TEXT2_ VARCHAR 4000     jpa变量text存className,text2存id    
13 CREATE_TIME_ DATETIME 19     创建时间    
14 LAST_UPDATED_TIME_ DATETIME 19     最后更新时间    
ACT\_ID_GROUP
群组
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 REV_ INT 10     多租户    
3 NAME_ VARCHAR 255     名称    
4 TYPE_ VARCHAR 255     类型    
ACT\_ID_INFO
用户详细信息
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 REV_ INT 10     乐观锁    
3 USER_ID_ VARCHAR 64     用户    
4 TYPE_ VARCHAR 64     类型    
5 KEY_ VARCHAR 255     属性名    
6 VALUE_ VARCHAR 255     属性值    
7 PASSWORD_ LONGBLOB 2147483647     密码    
8 PARENT_ID_ VARCHAR 255     上级关联    
ACT\_ID_MEMBERSHIP
用户群组关系
# 字段名 字段类型 长度 默认 描述 主键 外键
1 USER_ID_ VARCHAR 64     用户   ACT\_ID_USER
2 GROUP_ID_ VARCHAR 64     群组   ACT\_ID_GROUP
ACT\_ID_USER
用户基本信息
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 REV_ INT 10     乐观锁    
3 FIRST_ VARCHAR 255        
4 LAST_ VARCHAR 255        
5 EMAIL_ VARCHAR 255     邮箱    
6 PWD_ VARCHAR 255     密码    
7 PICTURE_ID_ VARCHAR 64     头像 ACT\_GE_BYTEARRAY    
ACT\_PROCDEF_INFO
流程定义更新信息
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 PROC_DEF_ID_ VARCHAR 64 NOT NULL   流程定义   ACT\_RE_PROCDEF
3 REV_ INT 10     乐观锁    
4 INFO_JSON_ID_ VARCHAR 64     内容   ACT\_GE_BYTEARRAY
ACT\_RE_DEPLOYMENT
部署
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 NAME_ VARCHAR 255     名称    
3 CATEGORY_ VARCHAR 255     分类    
4 TENANT_ID_ VARCHAR 255     多租户    
5 DEPLOY_TIME_ TIMESTAMP 19     部署时间    
ACT\_RE_MODEL
模型
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 REV_ INT 10     乐观锁    
3 NAME_ VARCHAR 255     名称    
4 KEY_ VARCHAR 255     标识    
5 CATEGORY_ VARCHAR 255     分类    
6 CREATE_TIME_ TIMESTAMP 19     创建时间    
7 LAST_UPDATE_TIME_ TIMESTAMP 19     最后更新时间    
8 VERSION_ INT 10     版本    
9 META_INFO_ VARCHAR 4000     元数据    
10 DEPLOYMENT_ID_ VARCHAR 64     部署   ACT\_RE_DEPLOYMENT
11 EDITOR_SOURCE_VALUE_ID_ VARCHAR 64     设计器原始信息   ACT\_GE_BYTEARRAY
12 EDITOR_SOURCE_EXTRA_VALUE_ID_ VARCHAR 64     设计器扩展信息   ACT\_GE_BYTEARRAY
13 TENANT_ID_ VARCHAR 255     多租户    
ACT\_RE_PROCDEF
流程定义
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 REV_ INT 10     乐观锁    
3 CATEGORY_ VARCHAR 255     分类    
4 NAME_ VARCHAR 255     名称    
5 KEY_ VARCHAR 255 NOT NULL   标识    
6 VERSION_ INT 10 NOT NULL   版本    
7 DEPLOYMENT_ID_ VARCHAR 64     部署    
8 RESOURCE_NAME_ VARCHAR 4000     资源名称    
9 DGRM_RESOURCE_NAME_ VARCHAR 4000     图片资源名称    
10 DESCRIPTION_ VARCHAR 4000     描述    
11 HAS_START_FORM_KEY_ TINYINT 3     拥有开始表单标识    
12 HAS_GRAPHICAL_NOTATION_ TINYINT 3     拥有图形信息    
13 SUSPENSION_STATE_ INT 10     暂停状态 1激活 2暂停    
14 TENANT_ID_ VARCHAR 255     多租户    
ACT\_RU_EVENT_SUBSCR
事件订阅
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 REV_ INT 10     乐观锁    
3 EVENT_TYPE_ VARCHAR 255 NOT NULL   类型    
4 EVENT_NAME_ VARCHAR 255     名称    
5 EXECUTION_ID_ VARCHAR 64     执行   ACT\_RU_EXECUTION
6 PROC_INST_ID_ VARCHAR 64     流程实例    
7 ACTIVITY_ID_ VARCHAR 64     环节ID    
8 CONFIGURATION_ VARCHAR 255     配置    
9 CREATED_ TIMESTAMP 19 NOT NULL CURRENT_TIMESTAMP 创建时间    
10 PROC_DEF_ID_ VARCHAR 64     流程定义    
11 TENANT_ID_ VARCHAR 255     多租户    
ACT\_RU_EXECUTION
执行
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 REV_ INT 10     乐观锁    
3 PROC_INST_ID_ VARCHAR 64     流程实例   ACT\_RU_EXECUTION
4 BUSINESS_KEY_ VARCHAR 255     业务标识    
5 PARENT_ID_ VARCHAR 64     父执行   ACT\_RU_EXECUTION
6 PROC_DEF_ID_ VARCHAR 64     流程定义   ACT\_RE_PROCDEF
7 SUPER_EXEC_ VARCHAR 64     父流程实例中对应的执行   ACT\_RU_EXECUTION
8 ACT\_ID_ VARCHAR 255     环节ID    
9 IS_ACTIVE_ TINYINT 3     是否激活    
10 IS_CONCURRENT_ TINYINT 3     是否并行分支    
11 IS_SCOPE_ TINYINT 3     是否处于多实例或环节嵌套状态    
12 IS_EVENT_SCOPE_ TINYINT 3     是否激活状态    
13 SUSPENSION_STATE_ INT 10     暂停状态 1激活 2暂停    
14 CACHED_ENT_STATE_ INT 10     缓存的状态,事件监听第1位 人工任务第2位 异步作业第3位    
15 TENANT_ID_ VARCHAR 255     多租户    
16 NAME_ VARCHAR 255     名称    
17 LOCK_TIME_ TIMESTAMP 19     锁定时间    
ACT\_RU_IDENTITYLINK
参与者
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 REV_ INT 10     乐观锁    
3 GROUP_ID_ VARCHAR 255     群组    
4 TYPE_ VARCHAR 255     类型    
5 USER_ID_ VARCHAR 255     用户    
6 TASK_ID_ VARCHAR 64     任务   ACT\_RU_TASK
7 PROC_INST_ID_ VARCHAR 64     流程实例   ACT\_RU_EXECUTION
8 PROC_DEF_ID_ VARCHAR 64     流程定义   ACT\_RE_PROCDEF
ACT\_RU_JOB
异步作业
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 REV_ INT 10     乐观锁    
3 TYPE_ VARCHAR 255 NOT NULL   类型    
4 LOCK_EXP_TIME_ TIMESTAMP 19     锁定过期时间    
5 LOCK_OWNER_ VARCHAR 255     锁定节点    
6 EXCLUSIVE_ BIT 0     是否唯一    
7 EXECUTION_ID_ VARCHAR 64     执行    
8 PROCESS_INSTANCE_ID_ VARCHAR 64     流程实例    
9 PROC_DEF_ID_ VARCHAR 64     流程定义    
10 RETRIES_ INT 10     重试次数    
11 EXCEPTION_STACK_ID_ VARCHAR 64     异常堆栈   ACT\_GE_BYTEARRAY
12 EXCEPTION_MSG_ VARCHAR 4000     异常信息    
13 DUEDATE_ TIMESTAMP 19     截止时间    
14 REPEAT_ VARCHAR 255     重复    
15 HANDLER_TYPE_ VARCHAR 255     处理器类型    
16 HANDLER_CFG_ VARCHAR 4000     处理器配置    
17 TENANT_ID_ VARCHAR 255     多租户    
ACT\_RU_TASK
任务
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 REV_ INT 10     乐观锁    
3 EXECUTION_ID_ VARCHAR 64     执行   ACT\_RU_EXECUTION
4 PROC_INST_ID_ VARCHAR 64     流程实例   ACT\_RU_EXECUTION
5 PROC_DEF_ID_ VARCHAR 64     流程定义   ACT\_RE_PROCDEF
6 NAME_ VARCHAR 255     名称    
7 PARENT_TASK_ID_ VARCHAR 64     父任务    
8 DESCRIPTION_ VARCHAR 4000     描述    
9 TASK_DEF_KEY_ VARCHAR 255     任务定义标识(环节ID)    
10 OWNER_ VARCHAR 255     被代理人    
11 ASSIGNEE_ VARCHAR 255     负责人    
12 DELEGATION_ VARCHAR 64     委托状态 PENDING委托中,RESOLVED已处理    
13 PRIORITY_ INT 10     优先级    
14 CREATE_TIME_ TIMESTAMP 19     创建时间    
15 DUE_DATE_ DATETIME 19     截止时间    
16 CATEGORY_ VARCHAR 255     分类    
17 SUSPENSION_STATE_ INT 10     暂停状态 1激活 2暂停    
18 TENANT_ID_ VARCHAR 255     多租户    
19 FORM_KEY_ VARCHAR 255     表单标识    
ACT\_RU_VARIABLE
变量
# 字段名 字段类型 长度 默认 描述 主键 外键
1 ID_ VARCHAR 64     主键    
2 REV_ INT 10     乐观锁    
3 TYPE_ VARCHAR 255 NOT NULL   类型    
4 NAME_ VARCHAR 255 NOT NULL   名称    
5 EXECUTION_ID_ VARCHAR 64     执行   ACT\_RU_EXECUTION
6 PROC_INST_ID_ VARCHAR 64     流程实例   ACT\_RU_EXECUTION
7 TASK_ID_ VARCHAR 64     任务    
8 BYTEARRAY_ID_ VARCHAR 64     内容   ACT\_GE_BYTEARRAY
9 DOUBLE_ DOUBLE 22     浮点值    
10 LONG_ BIGINT 19     长整数值    
11 TEXT_ VARCHAR 4000     文本值    
12 TEXT2_ VARCHAR 4000     jpa变量text存className,text2存id

补充说明

1)activiti的历史任务是单独的表来储存,表之间没有任何外间关联,从以上模型就可以看出

1、ACT_HI_ACTINST 流程活动历史记录信息
2、ACT_HI_ATTACHMENT
3、ACT_HI_COMMENT 流程评论信息
4、ACT_HI_DETAIL 流程明细信息
5、ACT_HI_IDENTITYLINK 流程身份关系信息
6、ACT_HI_PROCINST 流程历史信息
7、ACT_HI_TASKINST 任务历史信息
8、ACT_HI_VARINST 历史流程中的参数

2)historyService可查询历史数据表(可查询以上这些表,与流程历史相关数据的查询都可以通过<span style="font-family: Arial, Helvetica, sans-serif;">historyService来查询</span>)
1、historyService.createHistoricActivityInstanceQuery(); //查询ACT_HI_ACTINST表
2、historyService.createHistoricDetailQuery(); //查询ACT_HI_DETAIL表
3、historyService.createHistoricProcessInstanceQuery(); //查询ACT_HI_PROCINST表
4、historyService.createHistoricTaskInstanceQuery(); //查询ACT_HI_TASKINST表
5、historyService.createHistoricVariableInstanceQuery(); //查询ACT_HI_VARINST表

mybatis 配置

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
<settings>
<setting name="lazyLoadingEnabled" value="false" />
</settings>
<typeAliases>
<typeAlias type="org.activiti.engine.impl.persistence.ByteArrayRefTypeHandler" alias="ByteArrayRefTypeHandler"/>
</typeAliases>
<typeHandlers>
<typeHandler handler="ByteArrayRefTypeHandler"
javaType="org.activiti.engine.impl.persistence.entity.ByteArrayRef"
jdbcType="VARCHAR"/>
</typeHandlers>
<mappers>
<mapper resource="org/activiti/db/mapping/entity/Attachment.xml" />
<mapper resource="org/activiti/db/mapping/entity/ByteArray.xml" />
<mapper resource="org/activiti/db/mapping/entity/Comment.xml" />
<mapper resource="org/activiti/db/mapping/entity/Deployment.xml" />
<mapper resource="org/activiti/db/mapping/entity/Execution.xml" />
<mapper resource="org/activiti/db/mapping/entity/Group.xml" />
<mapper resource="org/activiti/db/mapping/entity/HistoricActivityInstance.xml" />
<mapper resource="org/activiti/db/mapping/entity/HistoricDetail.xml" />
<mapper resource="org/activiti/db/mapping/entity/HistoricProcessInstance.xml" />
<mapper resource="org/activiti/db/mapping/entity/HistoricVariableInstance.xml" />
<mapper resource="org/activiti/db/mapping/entity/HistoricTaskInstance.xml" />
<mapper resource="org/activiti/db/mapping/entity/HistoricIdentityLink.xml" />
<mapper resource="org/activiti/db/mapping/entity/IdentityInfo.xml" />
<mapper resource="org/activiti/db/mapping/entity/IdentityLink.xml" />
<mapper resource="org/activiti/db/mapping/entity/Job.xml" />
<mapper resource="org/activiti/db/mapping/entity/Membership.xml" />
<mapper resource="org/activiti/db/mapping/entity/Model.xml" />
<mapper resource="org/activiti/db/mapping/entity/ProcessDefinition.xml" />
<mapper resource="org/activiti/db/mapping/entity/Property.xml" />
<mapper resource="org/activiti/db/mapping/entity/Resource.xml" />
<mapper resource="org/activiti/db/mapping/entity/TableData.xml" />
<mapper resource="org/activiti/db/mapping/entity/Task.xml" />
<mapper resource="org/activiti/db/mapping/entity/User.xml" />
<mapper resource="org/activiti/db/mapping/entity/VariableInstance.xml" />
<mapper resource="org/activiti/db/mapping/entity/EventSubscription.xml" />
</mappers>
</configuration>

下面是就那其中一个映射配置来说明,如HistoricProcessInstance.xml:

<?xml version="1.0" encoding="UTF-8" ?>

<!--
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity">

<!-- HISTORIC TASK INSTANCE INSERT -->

<insert id="insertHistoricTaskInstance" parameterType="org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity">
insert into ${prefix}ACT_HI_TASKINST (
ID_,
PROC_DEF_ID_,
PROC_INST_ID_,
EXECUTION_ID_,
NAME_,
PARENT_TASK_ID_,
DESCRIPTION_,
OWNER_,
ASSIGNEE_,
START_TIME_,
CLAIM_TIME_,
END_TIME_,
DURATION_,
DELETE_REASON_,
TASK_DEF_KEY_,
FORM_KEY_,
PRIORITY_,
DUE_DATE_,
CATEGORY_,
TENANT_ID_
) values (
#{id ,jdbcType=VARCHAR},
#{processDefinitionId, jdbcType=VARCHAR},
#{processInstanceId, jdbcType=VARCHAR},
#{executionId, jdbcType=VARCHAR},
#{name ,jdbcType=VARCHAR},
#{parentTaskId ,jdbcType=VARCHAR},
#{description ,jdbcType=VARCHAR},
#{owner ,jdbcType=VARCHAR},
#{assignee ,jdbcType=VARCHAR},
#{startTime, jdbcType=TIMESTAMP},
#{claimTime, jdbcType=TIMESTAMP},
#{endTime, jdbcType=TIMESTAMP},
#{durationInMillis ,jdbcType=BIGINT},
#{deleteReason ,jdbcType=VARCHAR},
#{taskDefinitionKey ,jdbcType=VARCHAR},
#{formKey ,jdbcType=VARCHAR},
#{priority, jdbcType=INTEGER},
#{dueDate, jdbcType=TIMESTAMP},
#{category, jdbcType=VARCHAR},
#{tenantId, jdbcType=VARCHAR}
)
</insert>

<!-- HISTORIC TASK INSTANCE UPDATE -->

<update id="updateHistoricTaskInstance" parameterType="org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity">
update ${prefix}ACT_HI_TASKINST set
EXECUTION_ID_ = #{executionId, jdbcType=VARCHAR},
NAME_ = #{name, jdbcType=VARCHAR},
PARENT_TASK_ID_ = #{parentTaskId, jdbcType=VARCHAR},
DESCRIPTION_ = #{description, jdbcType=VARCHAR},
OWNER_ = #{owner, jdbcType=VARCHAR},
ASSIGNEE_ = #{assignee, jdbcType=VARCHAR},
CLAIM_TIME_ = #{claimTime, jdbcType=TIMESTAMP},
END_TIME_ = #{endTime, jdbcType=TIMESTAMP},
DURATION_ = #{durationInMillis ,jdbcType=BIGINT},
DELETE_REASON_ = #{deleteReason ,jdbcType=VARCHAR},
TASK_DEF_KEY_ = #{taskDefinitionKey ,jdbcType=VARCHAR},
FORM_KEY_ = #{formKey ,jdbcType=VARCHAR},
PRIORITY_ = #{priority, jdbcType=INTEGER},
DUE_DATE_ = #{dueDate, jdbcType=TIMESTAMP},
CATEGORY_ = #{category, jdbcType=VARCHAR}
where ID_ = #{id}
</update>

<!-- HISTORIC TASK INSTANCE DELETE -->

<delete id="deleteHistoricTaskInstance" parameterType="org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity">
delete from ${prefix}ACT_HI_TASKINST where ID_ = #{id}
</delete>

<!-- HISTORIC TASK INSTANCE RESULT MAP -->

<resultMap id="historicTaskInstanceResultMap" type="org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity">
<id property="id" column="ID_" jdbcType="VARCHAR" />
<result property="processDefinitionId" column="PROC_DEF_ID_" jdbcType="VARCHAR" />
<result property="processInstanceId" column="PROC_INST_ID_" jdbcType="VARCHAR" />
<result property="executionId" column="EXECUTION_ID_" jdbcType="VARCHAR" />
<result property="name" column="NAME_" jdbcType="VARCHAR" />
<result property="parentTaskId" column="PARENT_TASK_ID_" jdbcType="VARCHAR" />
<result property="description" column="DESCRIPTION_" jdbcType="VARCHAR" />
<result property="owner" column="OWNER_" jdbcType="VARCHAR" />
<result property="assignee" column="ASSIGNEE_" jdbcType="VARCHAR" />
<result property="startTime" column="START_TIME_" jdbcType="TIMESTAMP" />
<result property="claimTime" column="CLAIM_TIME_" jdbcType="TIMESTAMP" />
<result property="endTime" column="END_TIME_" jdbcType="TIMESTAMP" />
<result property="durationInMillis" column="DURATION_" jdbcType="BIGINT" />
<result property="deleteReason" column="DELETE_REASON_" jdbcType="VARCHAR" />
<result property="taskDefinitionKey" column="TASK_DEF_KEY_" jdbcType="VARCHAR" />
<result property="formKey" column="FORM_KEY_" jdbcType="VARCHAR" />
<result property="priority" column="PRIORITY_" jdbcType="INTEGER" />
<result property="dueDate" column="DUE_DATE_" jdbcType="TIMESTAMP" />
<result property="category" column="CATEGORY_" jdbcType="VARCHAR" />
<result property="tenantId" column="TENANT_ID_" jdbcType="VARCHAR" />
</resultMap>

<resultMap id="historicTaskInstanceAndVariablesResultMap" type="org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity">
<id property="id" column="ID_" jdbcType="VARCHAR" />
<result property="processDefinitionId" column="PROC_DEF_ID_" jdbcType="VARCHAR" />
<result property="processInstanceId" column="PROC_INST_ID_" jdbcType="VARCHAR" />
<result property="executionId" column="EXECUTION_ID_" jdbcType="VARCHAR" />
<result property="name" column="NAME_" jdbcType="VARCHAR" />
<result property="parentTaskId" column="PARENT_TASK_ID_" jdbcType="VARCHAR" />
<result property="description" column="DESCRIPTION_" jdbcType="VARCHAR" />
<result property="owner" column="OWNER_" jdbcType="VARCHAR" />
<result property="assignee" column="ASSIGNEE_" jdbcType="VARCHAR" />
<result property="startTime" column="START_TIME_" jdbcType="TIMESTAMP" />
<result property="claimTime" column="CLAIM_TIME_" jdbcType="TIMESTAMP" />
<result property="endTime" column="END_TIME_" jdbcType="TIMESTAMP" />
<result property="durationInMillis" column="DURATION_" jdbcType="BIGINT" />
<result property="deleteReason" column="DELETE_REASON_" jdbcType="VARCHAR" />
<result property="taskDefinitionKey" column="TASK_DEF_KEY_" jdbcType="VARCHAR" />
<result property="formKey" column="FORM_KEY_" jdbcType="VARCHAR" />
<result property="priority" column="PRIORITY_" jdbcType="INTEGER" />
<result property="dueDate" column="DUE_DATE_" jdbcType="TIMESTAMP" />
<result property="category" column="CATEGORY_" jdbcType="VARCHAR" />
<result property="tenantId" column="TENANT_ID_" jdbcType="VARCHAR" />
<collection property="queryVariables" column="TASK_ID_" javaType="ArrayList" ofType="org.activiti.engine.impl.persistence.entity.HistoricVariableInstanceEntity">
<id property="id" column="VAR_ID_"/>
<result property="name" column="VAR_NAME_" javaType="String" jdbcType="VARCHAR" />
<result property="variableType" column="VAR_TYPE_" javaType="org.activiti.engine.impl.variable.VariableType" jdbcType="VARCHAR" />
<result property="revision" column="VAR_REV_" jdbcType="INTEGER" />
<result property="processInstanceId" column="VAR_PROC_INST_ID_" jdbcType="VARCHAR" />
<result property="executionId" column="VAR_EXECUTION_ID_" jdbcType="VARCHAR" />
<result property="taskId" column="VAR_TASK_ID_" jdbcType="VARCHAR" />
<result property="byteArrayRef" column="VAR_BYTEARRAY_ID_" typeHandler="ByteArrayRefTypeHandler"/>
<result property="doubleValue" column="VAR_DOUBLE_" jdbcType="DOUBLE" />
<result property="textValue" column="VAR_TEXT_" jdbcType="VARCHAR" />
<result property="textValue2" column="VAR_TEXT2_" jdbcType="VARCHAR" />
<result property="longValue" column="VAR_LONG_" jdbcType="BIGINT" />
</collection>
</resultMap>

<!-- HISTORIC TASK INSTANCE SELECT -->

<select id="selectHistoricTaskInstance" resultMap="historicTaskInstanceResultMap">
select * from ${prefix}ACT_HI_TASKINST where ID_ = #{historicTaskInstanceId}
</select>

<select id="selectHistoricTaskInstanceIdsByProcessInstanceId" resultType="string" parameterType="org.activiti.engine.impl.db.ListQueryParameterObject" >
select ID_
from ${prefix}ACT_HI_TASKINST
where PROC_INST_ID_ = #{parameter}
</select>

<select id="selectHistoricTaskInstancesByQueryCriteria" parameterType="org.activiti.engine.impl.HistoricTaskInstanceQueryImpl" resultMap="historicTaskInstanceResultMap">
${limitBefore}
select distinct RES.* ${limitBetween}
<include refid="selectHistoricTaskInstancesByQueryCriteriaSql"/>
${orderBy}
${limitAfter}
</select>

<select id="selectHistoricTaskInstanceCountByQueryCriteria" parameterType="org.activiti.engine.impl.HistoricTaskInstanceQueryImpl" resultType="long">
select count(RES.ID_)
<include refid="selectHistoricTaskInstancesByQueryCriteriaSql"/>
</select>

<sql id="selectHistoricTaskInstancesByQueryCriteriaSql">
from ${prefix}ACT_HI_TASKINST RES
<include refid="commonSelectHistoricTaskInstancesByQueryCriteriaSql"/>
</sql>

<select id="selectHistoricTaskInstancesWithVariablesByQueryCriteria" parameterType="org.activiti.engine.impl.HistoricTaskInstanceQueryImpl" resultMap="historicTaskInstanceAndVariablesResultMap">
${limitBefore}
select distinct RES.*,
VAR.ID_ as VAR_ID_, VAR.NAME_ as VAR_NAME_, VAR.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.LAST_UPDATED_TIME_ as VAR_LAST_UPDATED_TIME_, VAR.LONG_ as VAR_LONG_
${limitBetween}
<include refid="selectHistoricTaskInstancesWithVariablesByQueryCriteriaSql"/>
${orderBy}
${limitAfter}
</select>

<select id="selectHistoricTaskInstancesWithVariablesByQueryCriteria_mssql_or_db2" parameterType="org.activiti.engine.impl.HistoricTaskInstanceQueryImpl" resultMap="historicTaskInstanceAndVariablesResultMap">
${limitBefore}
select distinct TEMPRES_ID_ as ID_,
TEMPRES_PROC_DEF_ID_ as PROC_DEF_ID_, TEMPRES_PROC_INST_ID_ as PROC_INST_ID_, TEMPRES_EXECUTION_ID_ as EXECUTION_ID_,
TEMPRES_NAME_ as NAME_, TEMPRES_PARENT_TASK_ID_ as PARENT_TASK_ID_,
TEMPRES_DESCRIPTION_ as DESCRIPTION_, TEMPRES_OWNER_ as OWNER_, TEMPRES_ASSIGNEE_ as ASSIGNEE_,
TEMPRES_START_TIME_ as START_TIME_, TEMPRES_CLAIM_TIME_ as CLAIM_TIME_, TEMPRES_END_TIME_ as END_TIME_,
TEMPRES_DURATION_ as DURATION_, TEMPRES_TASK_DEF_KEY_ as TASK_DEF_KEY_, TEMPRES_FORM_KEY_ as FORM_KEY_,
TEMPRES_PRIORITY_ as PRIORITY_, TEMPRES_DUE_DATE_ as DUE_DATE_,
TEMPRES_DELETE_REASON_ as DELETE_REASON_,
TEMPVAR_ID_ as VAR_ID_, TEMPVAR_NAME_ as VAR_NAME_, TEMPVAR_TYPE_ as VAR_TYPE_, TEMPVAR_REV_ as VAR_REV_,
TEMPVAR_PROC_INST_ID_ as VAR_PROC_INST_ID_, TEMPVAR_EXECUTION_ID_ as VAR_EXECUTION_ID_, TEMPVAR_TASK_ID_ as VAR_TASK_ID_,
TEMPVAR_BYTEARRAY_ID_ as VAR_BYTEARRAY_ID_, TEMPVAR_DOUBLE_ as VAR_DOUBLE_,
TEMPVAR_TEXT_ as VAR_TEXT_, TEMPVAR_LAST_UPDATED_TIME_ as VAR_LAST_UPDATED_TIME_, TEMPVAR_TEXT2_ as VAR_TEXT2_, TEMPVAR_LONG_ as VAR_LONG_
${limitOuterJoinBetween}
RES.ID_ as TEMPRES_ID_, RES.PROC_DEF_ID_ as TEMPRES_PROC_DEF_ID_, RES.PROC_INST_ID_ as TEMPRES_PROC_INST_ID_,
RES.EXECUTION_ID_ as TEMPRES_EXECUTION_ID_, RES.NAME_ as TEMPRES_NAME_ , RES.PARENT_TASK_ID_ as TEMPRES_PARENT_TASK_ID_,
RES.DESCRIPTION_ as TEMPRES_DESCRIPTION_, RES.OWNER_ as TEMPRES_OWNER_, RES.ASSIGNEE_ as TEMPRES_ASSIGNEE_,
RES.START_TIME_ as TEMPRES_START_TIME_, RES.END_TIME_ as TEMPRES_END_TIME_, RES.CLAIM_TIME_ as TEMPRES_CLAIM_TIME_,
RES.DURATION_ as TEMPRES_DURATION_, RES.TASK_DEF_KEY_ as TEMPRES_TASK_DEF_KEY_,
RES.FORM_KEY_ as TEMPRES_FORM_KEY_, RES.PRIORITY_ as TEMPRES_PRIORITY_,
RES.DUE_DATE_ as TEMPRES_DUE_DATE_, RES.DELETE_REASON_ as TEMPRES_DELETE_REASON_,
VAR.ID_ as TEMPVAR_ID_, VAR.NAME_ as TEMPVAR_NAME_, VAR.VAR_TYPE_ as TEMPVAR_TYPE_, VAR.REV_ as TEMPVAR_REV_,
VAR.PROC_INST_ID_ as TEMPVAR_PROC_INST_ID_, VAR.EXECUTION_ID_ as TEMPVAR_EXECUTION_ID_, VAR.TASK_ID_ as TEMPVAR_TASK_ID_,
VAR.BYTEARRAY_ID_ as TEMPVAR_BYTEARRAY_ID_, VAR.DOUBLE_ as TEMPVAR_DOUBLE_,
VAR.TEXT_ as TEMPVAR_TEXT_, VAR.TEXT2_ as TEMPVAR_TEXT2_, VAR.LAST_UPDATED_TIME_ as TEMPVAR_LAST_UPDATED_TIME_, VAR.LONG_ as TEMPVAR_LONG_
<include refid="selectHistoricTaskInstancesWithVariablesByQueryCriteriaSql"/>
${orderBy}
${limitAfter}
</select>

<sql id="selectHistoricTaskInstancesWithVariablesByQueryCriteriaSql">
from ${prefix}ACT_HI_TASKINST RES
<choose>
<when test="includeTaskLocalVariables && includeProcessVariables">
left outer join ${prefix}ACT_HI_VARINST VAR ON RES.ID_ = VAR.TASK_ID_ or RES.PROC_INST_ID_ = VAR.EXECUTION_ID_
</when>
<otherwise>
<if test="includeTaskLocalVariables">
left outer join ${prefix}ACT_HI_VARINST VAR ON RES.ID_ = VAR.TASK_ID_
</if>
<if test="includeProcessVariables">
left outer join ${prefix}ACT_HI_VARINST VAR ON RES.PROC_INST_ID_ = VAR.EXECUTION_ID_ and VAR.TASK_ID_ is null
</if>
</otherwise>
</choose>
<include refid="commonSelectHistoricTaskInstancesByQueryCriteriaSql"/>
</sql>

<sql id="commonSelectHistoricTaskInstancesByQueryCriteriaSql">
<if test="candidateUser != null || candidateGroups != null">
inner join ${prefix}ACT_HI_IDENTITYLINK HI on HI.TASK_ID_ = RES.ID_
</if>
<if test="processFinished || processUnfinished || processInstanceBusinessKey != null || processInstanceBusinessKeyLike != null">
inner join ${prefix}ACT_HI_PROCINST HPI ON RES.PROC_INST_ID_ = HPI.ID_
</if>
<if test="processDefinitionKey != null || processDefinitionKeyLike != null || processDefinitionName != null || processDefinitionNameLike != null">
inner join ${prefix}ACT_RE_PROCDEF D on RES.PROC_DEF_ID_ = D.ID_
</if>
<foreach collection="queryVariableValues" index="index" item="var">
<choose>
<when test="var.local">
inner join ${prefix}ACT_HI_VARINST A${index} on RES.ID_ = A${index}.TASK_ID_
</when>
<otherwise>
inner join ${prefix}ACT_HI_VARINST A${index} on RES.PROC_INST_ID_ = A${index}.PROC_INST_ID_
</otherwise>
</choose>
</foreach>
<where>
<if test="taskId != null">
RES.ID_ = #{taskId}
</if>
<if test="processDefinitionId != null">
and RES.PROC_DEF_ID_ = #{processDefinitionId}
</if>
<if test="processDefinitionKey != null">
and D.KEY_ = #{processDefinitionKey}
</if>
<if test="processDefinitionKeyLike != null">
and D.KEY_ like #{processDefinitionKeyLike}
</if>
<if test="processDefinitionName != null">
and D.NAME_ = #{processDefinitionName}
</if>
<if test="processDefinitionNameLike != null">
and D.NAME_ like #{processDefinitionNameLike}
</if>
<if test="processInstanceId != null">
and RES.PROC_INST_ID_ = #{processInstanceId}
</if>
<if test="processInstanceBusinessKey != null">
and HPI.BUSINESS_KEY_ = #{processInstanceBusinessKey}
</if>
<if test="processInstanceBusinessKeyLike != null">
and HPI.BUSINESS_KEY_ like #{processInstanceBusinessKeyLike}
</if>
<if test="taskDefinitionKey != null">
and RES.TASK_DEF_KEY_ = #{taskDefinitionKey}
</if>
<if test="taskDefinitionKeyLike != null">
and RES.TASK_DEF_KEY_ like #{taskDefinitionKeyLike}
</if>
<if test="executionId != null">
and RES.EXECUTION_ID_ = #{executionId}
</if>
<if test="taskName != null">
and RES.NAME_ = #{taskName}
</if>
<if test="taskNameLike != null">
and RES.NAME_ like #{taskNameLike}
</if>
<if test="taskParentTaskId != null">
and RES.PARENT_TASK_ID_ = #{taskParentTaskId}
</if>
<if test="taskDescription != null">
and RES.DESCRIPTION_ = #{taskDescription}
</if>
<if test="taskDescriptionLike != null">
and RES.DESCRIPTION_ like #{taskDescriptionLike}
</if>
<if test="taskDeleteReason != null">
and RES.DELETE_REASON_ = #{taskDeleteReason}
</if>
<if test="taskDeleteReasonLike != null">
and RES.DELETE_REASON_ like #{taskDeleteReasonLike}
</if>
<if test="taskOwner != null">
and RES.OWNER_ = #{taskOwner}
</if>
<if test="taskOwnerLike != null">
and RES.OWNER_ like #{taskOwnerLike}
</if>
<if test="taskAssignee != null">
and RES.ASSIGNEE_ = #{taskAssignee}
</if>
<if test="taskAssigneeLike != null">
and RES.ASSIGNEE_ like #{taskAssigneeLike}
</if>
<if test="taskPriority != null">
and RES.PRIORITY_ = #{taskPriority}
</if>
<if test="taskMinPriority != null">
and RES.PRIORITY_ >= #{taskMinPriority}
</if>
<if test="taskMaxPriority != null">
and RES.PRIORITY_ <= #{taskMaxPriority}
</if>
<if test="unfinished">
and RES.END_TIME_ is null
</if>
<if test="finished">
and RES.END_TIME_ is not null
</if>
<if test="processFinished">
and HPI.END_TIME_ is not null
</if>
<if test="processUnfinished">
and HPI.END_TIME_ is null
</if>
<if test="dueDate != null">
and RES.DUE_DATE_ = #{dueDate}
</if>
<if test="dueBefore != null">
and RES.DUE_DATE_ < #{dueBefore}
</if>
<if test="dueAfter != null">
and RES.DUE_DATE_ > #{dueAfter}
</if>
<if test="withoutDueDate">
and RES.DUE_DATE_ is null
</if>
<if test="creationDate != null">
and RES.START_TIME_ = #{creationDate}
</if>
<if test="creationBeforeDate != null">
and RES.START_TIME_ < #{creationBeforeDate}
</if>
<if test="creationAfterDate != null">
and RES.START_TIME_ > #{creationAfterDate}
</if>
<if test="completedDate != null">
and RES.END_TIME_ = #{completedDate}
</if>
<if test="completedBeforeDate != null">
and RES.END_TIME_ < #{completedBeforeDate}
</if>
<if test="completedAfterDate != null">
and RES.END_TIME_ > #{completedAfterDate}
</if>
<if test="category != null">
and RES.CATEGORY_ = #{category}
</if>
<if test="tenantId != null">
and RES.TENANT_ID_ = #{tenantId}
</if>
<if test="tenantIdLike != null">
and RES.TENANT_ID_ like #{tenantIdLike}
</if>
<if test="withoutTenantId">
and (RES.TENANT_ID_ = '' or RES.TENANT_ID_ is null)
</if>
<if test="candidateUser != null || candidateGroups != null">
and RES.ASSIGNEE_ is null
and HI.TYPE_ = 'candidate'
and
(
<if test="candidateUser != null">
HI.USER_ID_ = #{candidateUser}
</if>
<if test="candidateUser != null && candidateGroups != null && candidateGroups.size() > 0">
or
</if>
<if test="candidateGroups != null && candidateGroups.size() > 0">
HI.GROUP_ID_ IN
<foreach item="group" index="index" collection="candidateGroups"
open="(" separator="," close=")">
#{group}
</foreach>
</if>
)
</if>
<if test="involvedUser != null">
and (
exists(select LINK.USER_ID_ from ${prefix}ACT_HI_IDENTITYLINK LINK where USER_ID_ = #{involvedUser} and LINK.TASK_ID_ = RES.ID_)
or RES.ASSIGNEE_ = #{involvedUser}
or RES.OWNER_ = #{involvedUser}
)
</if>
<foreach item="queryVar" collection="queryVariableValues" index="index">
<if test="!queryVar.local">
<!-- When process instance variable is queried for, taskId should be null -->
and A${index}.TASK_ID_ is null
</if>
<if test="queryVar.name != null">
<!-- Match-all variable-names when name is null -->
and A${index}.NAME_= #{queryVar.name}
</if>
<if test="!queryVar.type.equals('null')">
and A${index}.VAR_TYPE_ = #{queryVar.type}
</if>
<!-- Variable value -->
<if test="queryVar.textValue != null && queryVar.longValue == null && queryVar.doubleValue == null">
<choose>
<when test="queryVar.operator.equals('EQUALS_IGNORE_CASE') || queryVar.operator.equals('NOT_EQUALS_IGNORE_CASE')">
and lower(A${index}.TEXT_)
</when>
<otherwise>
and A${index}.TEXT_
</otherwise>
</choose>
<choose>
<when test="queryVar.operator.equals('LIKE')">LIKE</when>
<otherwise><include refid="executionVariableOperator" /></otherwise>
</choose>
#{queryVar.textValue}
</if>
<if test="queryVar.textValue2 != null">
and A${index}.TEXT2_
<choose>
<when test="queryVar.operator.equals('LIKE')">LIKE</when>
<otherwise><include refid="executionVariableOperator" /></otherwise>
</choose>
#{queryVar.textValue2}
</if>
<if test="queryVar.longValue != null">
and A${index}.LONG_
<include refid="executionVariableOperator" />
#{queryVar.longValue}
</if>
<if test="queryVar.doubleValue != null">
and A${index}.DOUBLE_
<include refid="executionVariableOperator" />
#{queryVar.doubleValue}
</if>
<!-- Null variable type -->
<if test="queryVar.textValue == null && queryVar.textValue2 == null && queryVar.longValue == null && queryVar.doubleValue == null">
<choose>
<when test="queryVar.operator.equals('NOT_EQUALS')">
and (A${index}.TEXT_ is not null or A${index}.TEXT2_ is not null or A${index}.LONG_ is not null or A${index}.DOUBLE_ is not null or A${index}.BYTEARRAY_ID_ is not null)
</when>
<otherwise>
and A${index}.TEXT_ is null and A${index}.TEXT2_ is null and A${index}.LONG_ is null and A${index}.DOUBLE_ is null and A${index}.BYTEARRAY_ID_ is null
</otherwise>
</choose>
</if>
</foreach>
</where>
</sql>

<sql id="executionVariableOperator">
<choose>
<when test="queryVar.operator.equals('EQUALS')">=</when>
<when test="queryVar.operator.equals('EQUALS_IGNORE_CASE')">=</when>
<when test="queryVar.operator.equals('NOT_EQUALS')"><></when>
<when test="queryVar.operator.equals('NOT_EQUALS_IGNORE_CASE')"><></when>
<when test="queryVar.operator.equals('GREATER_THAN')">></when>
<when test="queryVar.operator.equals('GREATER_THAN_OR_EQUAL')">>=</when>
<when test="queryVar.operator.equals('LESS_THAN')"><</when>
<when test="queryVar.operator.equals('LESS_THAN_OR_EQUAL')"><=</when>
</choose>
</sql>

<select id="selectHistoricTaskInstanceByNativeQuery" parameterType="java.util.Map" resultMap="historicTaskInstanceResultMap">
<if test="resultType == 'LIST_PAGE'">
${limitBefore}
</if>
${sql}
<if test="resultType == 'LIST_PAGE'">
${limitAfter}
</if>
</select>

<select id="selectHistoricTaskInstanceByNativeQuery_mssql_or_db2" parameterType="java.util.Map" resultMap="historicTaskInstanceResultMap">
<if test="resultType == 'LIST_PAGE'">
${limitBeforeNativeQuery}
</if>
${sql}
<if test="resultType == 'LIST_PAGE'">
${limitAfter}
</if>
</select>

<select id="selectHistoricTaskInstanceCountByNativeQuery" parameterType="java.util.Map" resultType="long">
${sql}
</select>
</mapper>

官方文档5.21

中文翻译文档下载

英文文档地址