camunda 自定义sql查询数据

历史流程实例对应的表:ACT_HI_PROCINST

@Resource
HistoryService historyService;

// 查询历史流程实例列表----不分页

List<HistoricProcessInstance> processInstancesList = historyService.createNativeHistoricProcessInstanceQuery()
                .sql(customSql(" SELECT HPI.* ,DEF.NAME_, DEF.VERSION_, DEF.DEPLOYMENT_ID_ FROM ", queryDto, "HPI.START_TIME_  DESC")).list();

// 查询历史流程实例列表----分页

List<HistoricProcessInstance> processInstanceList = historyService.createNativeHistoricProcessInstanceQuery()
                .sql(customSql("SELECT HPI.* ,DEF.NAME_, DEF.VERSION_, DEF.DEPLOYMENT_ID_ FROM ", queryDto,  "HPI.START_TIME_  DESC"))
                .listPage(page.getStartRow(), page.getPageSize());

// 查询历史流程实例数量

long count = historyService.createNativeHistoricProcessInstanceQuery()
                .sql(customSql("select count(*) from ", queryDto,  "HPI.START_TIME_  DESC")).count();
/**
     * 自定义sql查询
     *
     * @param initSql 初始化sql
     * @param dto     查询参数
     * @param orderBy 排序参数
     * @return 拼接后的sql
     */
    private String customSql(String initSql, MyHistoricProcessInstanceQueryDto dto, String orderBy) {
        String customSql = "";
        if (Objects.isNull(dto)) {
            return customSql;
        }
        String tenantId = dto.getTenantId();
        String processDefinitionKey = dto.getProcessDefinitionKey();
        List<String> processInstanceBusinessKeyIn = dto.getProcessInstanceBusinessKeyIn();
        String processInstanceBusinessKey = dto.getProcessInstanceBusinessKey();
        String processInstanceId = dto.getProcessInstanceId();
        List<String> stateList = dto.getStateList();


        if (StringUtils.isEmpty(tenantId)) {
            return customSql;
        }
        StringBuilder stringBuilder = new StringBuilder();

        stringBuilder.append(initSql)
                .append(managementService.getTableName(HistoricProcessInstance.class)).append(" HPI ")
                .append(" LEFT JOIN ")
                .append(managementService.getTableName(ProcessDefinitionEntity.class)).append(" DEF ")
                .append(" ON HPI.PROC_DEF_ID_ = DEF.ID_  ")
                .append(" WHERE HPI.TENANT_ID_ = '").append(tenantId).append("'");

        if (StringUtils.isNotEmpty(processDefinitionKey)) {
            stringBuilder.append(" and HPI.PROC_DEF_KEY_ = '").append(processDefinitionKey).append("'");
        }

        if (StringUtils.isNotEmpty(processInstanceBusinessKey)) {
            stringBuilder.append(" and HPI.BUSINESS_KEY_ = '").append(processInstanceBusinessKey).append("'");
        }

        if (CollectionUtils.isNotEmpty(processInstanceBusinessKeyIn)) {
            stringBuilder.append(" and HPI.BUSINESS_KEY_ in ( '").append(String.join("','", processInstanceBusinessKeyIn)).append("' )");
        }

        if (StringUtils.isNotEmpty(processInstanceId)) {
            stringBuilder.append(" and HPI.PROC_INST_ID_ = '").append(processInstanceId).append("'");
        }
        if (CollectionUtils.isNotEmpty(stateList)) {
            stringBuilder.append(" and HPI.STATE_ in ( '").append(String.join("','", stateList).toUpperCase()).append("' )");
        }

        if (StringUtils.isNotEmpty(orderBy)) {
            stringBuilder.append(" ORDER BY ").append(orderBy.toUpperCase());
        } else {
            stringBuilder.append(" ORDER BY HPI.START_TIME_ DESC");
        }

        return stringBuilder.toString();
    }
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JPA(Java Persistence API)是Java EE的一种ORM(对象关系映射)规范,它提供了一种简化数据库操作的方式。JPA本身提供了一些基本的CRUD(创建、读取、更新、删除)操作,但对于复杂的查询,我们可以使用自定义SQL来执行。 在JPA中,可以使用@Query注解来定义定义SQL查询。以下是一个示例: ```java @Repository public interface UserRepository extends JpaRepository<User, Long> { @Query(value = "SELECT * FROM users WHERE age > ?1", nativeQuery = true) List<User> findByAgeGreaterThan(int age); } ``` 在上面的示例中,我们使用@Query注解来定义了一个自定义SQL查询。nativeQuery参数设置为true表示使用原生SQL查询,而不是JPQL(Java Persistence Query Language)。?1表示第一个参数,它将与方法中的age参数进行绑定。 除了使用原生SQL查询,还可以使用JPQL查询。以下是一个使用JPQL的示例: ```java @Repository public interface UserRepository extends JpaRepository<User, Long> { @Query("SELECT u FROM User u WHERE u.age > :age") List<User> findByAgeGreaterThan(@Param("age") int age); } ``` 在上面的示例中,我们使用:age来表示参数名,并使用@Param注解将方法参数与查询参数进行绑定。 通过使用自定义SQL查询,我们可以更灵活地执行复杂的查询操作。但请注意,自定义SQL查询往往会导致与特定数据库相关的代码,因此在编写自定义SQL查询时应谨慎考虑跨数据库兼容性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值