查询API
有两种方法可以从引擎查询数据:查询API和原生查询。查询API允许使用流利的API编写完全类型安全的查询,你可以向查询中添加各种条件(所有条件都作为逻辑AND一起应用),也可以仅添加一个顺序,以下代码显示了一个示例:
List<Task> tasks = taskService.createTaskQuery()
.taskAssignee("kermit")
.processVariableValueEquals("orderId", "0815")
.orderByDueDate().asc()
.list();
有时你需要更强大的查询,例如使用OR运算符的查询或使用查询API无法表达的限制,对于这些情况,引入了原生查询,使你可以编写自己的SQL查询。返回类型由你使用的Query对象定义,数据被映射到正确的对象中,例如Task
、ProcessInstance
、Execution
等....由于查询将在数据库中触发,因此你必须使用数据库中定义的表名和列名,这需要一些有关内部数据结构的知识,建议谨慎使用原生查询,可以通过API检索表名,以使依赖性尽可能小。
List<Task> tasks = taskService.createNativeTaskQuery()
.sql("SELECT count(*) FROM " + managementService.getTableName(Task.class) + " T WHERE T.NAME_ = #{taskName}")
.parameter("taskName", "gonzoTask")
.list();
long count = taskService.createNativeTaskQuery()
.sql("SELECT count(*) FROM " + managementService.getTableName(Task.class) + " T1, "
+ managementService.getTableName(VariableInstanceEntity.class) + " V1 WHERE V1.TASK_ID_ = T1.ID_")
.count();
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。