1.介绍
在activiti中封装了一些实用的API,但是在实际的开发过程中,难免会有一些要求无法达到,这个时候activiti提供了一种直接面向数据库的操作--本地化查询,即使用sql语句对数据库进行查询。
2.使用
(1)ManagementService服务
这个服务有一些辅助性的工具,可以使得我们不必知道表名,通过API获得表名,获得表中的字段等信息。
//得到表名
String tableName = managementService.getTableName(Task.class);
System.out.println("Task对象对应的表名:"+tableName);
HistoryService historyService = engine.getHistoryService();
String htname = managementService.getTableName(HistoricProcessInstance.class);
//获得数据库表中各列名
List<String> list = managementService.getTableMetaData(htname).getColumnNames();
(2)查询
a) 拼装sql
将需要查询的数据通过sql语句表达出来,其中需要一些复杂查询的话需要一定的逻辑将sql语句拼装出来,将得到的表名和列名拼装进去,得到完整的sql;
b) 参数代替
为了避免sql注入,可以使用#{parameterName}的方式在sql语句中进行占位,然后通过方法将参数替换。
List<HistoricProcessInstance> l1 = historyService.createNativeHistoricProcessInstanceQuery()
.sql("select * from "+htname+" where "+list.get(0)+" = #{a}").parameter("a", "1").list();
System.out.println(l1);