疯狂Activiti6连载(8)Activiti数据查询(一)

  本文节选自《疯狂工作流讲义(第2版)》

京东购买地址:https://item.jd.com/12246565.html

工作流Activiti6电子书:http://blog.csdn.net/boxiong86/article/details/78488562

工作流Activiti6教学视频:http://blog.csdn.net/boxiong86/article/details/78608585

Activiti数据查询(一)

要点

    Activiti的数据查询、排序机制

 

Activiti数据查询

Activiti提供了一套数据查询API供开发者使用,可以使用各个服务组件的createXXXQuery方法来获取这些查询对象。本小节将结合用户组数据来讲解Activiti的数据查询设计,这些设计应用于整个Activiti的数据查询体系。

查询对象

Activiti的各个服务组件(XXXService)均提供了createXXXQuery方法,例如本章的IdentityService中的createGroupQuery方法和createUserQuery方法,TaskService中的craeteTaskQuery方法等,这些方法返回的是一个Query实例,例如createGroupQuery返回的是GroupQueryGroupQueryQuery的子接口

Query是全部查询对象的父接口,该接口定义了若干个基础方法,各个查询对象均可以使用这些公共方法,包括设置排序方式、数据量统计(count)、列表、分页和唯一记录查询。这些方法描述如下:

     asc:设置查询结果的排序方式为升序。

     count:计算查询结果的数据量。

     desc:设置查询结果的排序方式为降序。

     list:封装查询结果,返回相应类型的集合。

     listPage:分页返回查询结果。

     singleResult:查询单条符合条件的数据,如果查询不到,则返回null,如果查询到多条记录,则抛异常。

下面将以用户组数据为例,讲解这些方法的使用以及注意事项。

list方法

Query接口的list方法,将查询对象对应的实体数据以集合形式返回,返回的集合需要指定元素类型,如果没有查询条件,则会将表中全部的数据查出,默认按照主键(ID_列)升序排序。代码清单6-4中使用list方法。

代码清单6-4codes\06\6.2\list-data\src\org\crazyit\activiti\ListData.java

public static void main(String[] args) {

//创建流程引擎

ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

//得到身份服务组件实例

IdentityService identityService = engine.getIdentityService();

//写入5条用户组数据

createGroup(identityService, "1", "GroupA", "typeA");

createGroup(identityService, "2", "GroupB", "typeB");

createGroup(identityService, "3", "GroupC", "typeC");

createGroup(identityService, "4", "GroupD", "typeD");

createGroup(identityService, "5", "GroupE", "typeE");

//使用list方法查询全部的部署数据

List datas = identityService.createGroupQuery().list();

for (Group data : datas) {

System.out.println(data.getId() + "---" + data.getName() + " ");

}

}

 

//将用户组数据保存到数据库中

static void createGroup(IdentityService identityService, String id,

String name, String type) {

//调用newGroup方法创建Group实例

Group group = identityService.newGroup(id);

group.setName(name);

group.setType(type);

identityService.saveGroup(group);

}

代码清单6-4中,先往数据库中写入5条用户组数据,然后调用Querylist方法将全部数据查出(代码清单6-4中的粗体字代码),需要注意的是,在不设置任何排条件以及排序方式的情况下,将会以主键升序的方式返回结果,代码清单6-4运行结果如下:

1---GroupA

2---GroupB

3---GroupC

4---GroupD

5---GroupE

listPage方法

listPage方法与list方法类似,最终也是以主键升序排序返回结果集,与list方法不一样的是,listPage方法需要提供两个int参数,第一个参数数据的开始索引,从0开始,第二个参数为结果数量,不难看出,该方法适用于分页查询。代码清单6-5使用listPage方法进行查询。

代码清单6-5codes\06\6.2\list-page\src\org\crazyit\activiti\ListPage.java

public static void main(String[] args) {

//创建流程引擎

ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

//得到身份服务组件实例

IdentityService identityService = engine.getIdentityService();

//写入5条用户组数据

createGroup(identityService, "1", "GroupA", "typeA");

createGroup(identityService, "2", "GroupB", "typeB");

createGroup(identityService, "3", "GroupC", "typeC");

createGroup(identityService, "4", "GroupD", "typeD");

createGroup(identityService, "5", "GroupE", "typeE");

//调用listPage方法,从索引为2的记录开始,查询3条记录

List datas = identityService.createGroupQuery().listPage(2, 3);

for (Group data : datas) {

System.out.println(data.getId() + "---" + data.getName() + " ");

}

}

//将用户组数据保存到数据库中

static void createGroup(IdentityService identityService, String id,

String name, String type) {

//调用newGroup方法创建Group实例

Group group = identityService.newGroup(id);

group.setName(name);

group.setType(type);

identityService.saveGroup(group);

}

代码清单6-5中,使用了listPage方法,查询用户组的数据,设置从第二条记录开始,查询3条记录,该方法与MySQLLIMIT关键字类似。代码清单6-5运行结果如下:

3---GroupC

4---GroupD

5---GroupE

count方法

该方法用于计算查询结果的数据量,类似于SQL中的SELECT COUNT语句,如果不加任何的条件,将会统计整个表的数据量。代码清单6-6使用count方法。

代码清单6-6codes\06\6.2\count-data\src\org\crazyit\activiti\Count.java

public static void main(String[] args) {

//创建流程引擎

ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

//得到身份服务组件实例

IdentityService identityService = engine.getIdentityService();

//写入5条用户组数据

createGroup(identityService, UUID.randomUUID().toString(), "GroupA", "typeA");

createGroup(identityService, UUID.randomUUID().toString(), "GroupB", "typeB");

createGroup(identityService, UUID.randomUUID().toString(), "GroupC", "typeC");

createGroup(identityService, UUID.randomUUID().toString(), "GroupD", "typeD");

createGroup(identityService, UUID.randomUUID().toString(), "GroupE", "typeE");

//使用list方法查询全部的部署数据

long size = identityService.createGroupQuery().count();

System.out.println("Group数量:" + size);

}

 

//将用户组数据保存到数据库中

static void createGroup(IdentityService identityService, String id,

String name, String type) {

//调用newGroup方法创建Group实例

Group group = identityService.newGroup(id);

group.setName(name);

group.setType(type);

identityService.saveGroup(group);

}

 

  本文节选自《疯狂工作流讲义(第2版)》

京东购买地址:https://item.jd.com/12246565.html

工作流Activiti6电子书:http://blog.csdn.net/boxiong86/article/details/78488562

工作流Activiti6教学视频:http://blog.csdn.net/boxiong86/article/details/78608585

本书代码共享地址:https://gitee.com/yangenxiong/CrazyActiviti

疯狂Activiti6连载(8)Activiti数据查询(一)_第1张图片

疯狂Activiti6连载(8)Activiti数据查询(一)_第2张图片

你可能感兴趣的:(Activiti6)