activiti_在Activiti中执行自定义查询

activiti

activiti

(这可能最终会出现在Activiti 5.15版本的用户指南中,但是我已经想分享它了)

Activiti API允许使用高级API与数据库进行交互。 例如,对于检索数据,查询API和本机查询API的用法很强大。 但是,对于某些用例,它们可能不够灵活。 下一节描述了如何针对Activiti数据存储区执行完全自定义SQL语句(可以进行选择,插入,更新和删除),但如何完全在已配置的Process Engine内执行(例如,从而利用事务设置)。

为了定义自定义SQL语句,Activiti引擎利用其基础框架MyBatis的功能。 使用自定义SQL时,要做的第一件事是创建MyBatis映射器类。 可以在MyBatis用户指南中阅读更多信息。 例如,假设在某些用例中,不需要全部任务数据,而只需要其中的一小部分。 可以执行此操作的Mapper如下所示:

public interface MyTestMapper {

  @Select("SELECT ID_ as id, NAME_ as name, CREATE_TIME_ as createTime FROM ACT_RU_TASK")
  List<Map<String, Object>> selectTasks();

}

必须将此映射器提供给Process Engine配置,如下所示:

...
<property name="customMybatisMappers">
  <set>
    <value>org.activiti.standalone.cfg.MyTestMapper</value>
  </set>
</property>
...

请注意,这是一个接口。 底层的MyBatis框架将创建其实例,可以在运行时使用。 还要注意,该方法的返回值不是类型,而是一个映射列表(与具有列值的行列表相对应)。 如果需要,可以使用MyBatis映射器键入。

要执行上面的查询,必须使用managementService.executeCustomSql方法。 此方法接受一个CustomSqlExecution实例。 这是一个包装器,用于隐藏引擎正常工作所需的引擎内部位。

不幸的是,Java泛型使它的可读性比以前低。 下面的两个泛型类型是mapper类和return类型类。 但是,实际的逻辑只是调用mapper方法并返回其结果(如果适用)。

CustomSqlExecution<MyTestMapper, List<Map<String, Object>>> customSqlExecution =
    new AbstractCustomSqlExecution<MyTestMapper, List<Map<String, Object>>>(MyTestMapper.class) {

  public List<Map<String, Object>> execute(MyTestMapper customMapper) {
    return customMapper.selectTasks();
  }

};

List<Map<String, Object>> results = managementService.executeCustomSql(customSqlExecution);

在这种情况下,上面列表中的Map条目将仅包含ID,名称和创建时间,而不包含完整的任务对象。

使用上述方法时,任何SQL都是可能的。 另一个更复杂的示例:

@Select({
    "SELECT task.ID_ as taskId, variable.LONG_ as variableValue FROM ACT_RU_VARIABLE variable",
    "inner join ACT_RU_TASK task on variable.TASK_ID_ = task.ID_",
    "where variable.NAME_ = #{variableName}"
  })
  List<Map<String, Object>> selectTaskWithSpecificVariable(String variableName);

使用此方法,任务表将与变量表结合在一起。 仅保留具有特定名称的变量,并返回任务ID和相应的数值。

这将在Activiti 5.15中实现。 但是,该代码(更具体地说是Command实现wrapper接口)可以在Activiti的任何较旧版本中使用。

参考:我们的JCG合作伙伴Joram Barrez的“小脚大步”博客中,在Activiti中执行自定义查询

翻译自: https://www.javacodegeeks.com/2014/01/execute-custom-queries-in-activiti.html

activiti

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值