Activiti入门教程六(详解Activiti中的查询API)
来源:互联网 发布:推荐c 语言在线编译 编辑:程序博客网 时间:2024/05/21 07:04
这篇博客呢,主要通过用户组为例,在把Activiti中的查询的API跟学习一下。任何知识,都能发现共同点,所以以后我们在学习的道路上面,一定要多多发现知识的共同点,建立知识之间的联系,这回让自己事半功倍的,并且学习效率会越来越高,废话不多说了,马上进入正题。
先来张宏观图来看看吧!
如果看不懂的话,不用担心,下面小编来一点一点的讲解一下,保证你能够清醒。
Query接口
<span style="font-family:Comic Sans MS;font-size:18px;">public interface Query<T extends Query< ? , ? >, U extends Object> { T asc(); T desc(); long count(); U singleResult(); List<U> list(); List<U> listPage(int firstResult, int maxResults);}</span>
这里面是什么东东呢,最底层的封装操作,通过上面的源码,我们可以看出,是一些排序、查询list,或者listPage分页查询之类的操作。那么这些方法的实现放置到了哪里呢,在上图中我们发现了一个抽象类AbstractQuery,Query接口中的这些方法,被AbstractQuery所实现。
GroupQuery接口
该接口继承自Query接口,并且扩展了一些属于自己的方法。
<span style="font-family:Comic Sans MS;font-size:18px;">public interface GroupQuery extends Query<GroupQuery, Group> { GroupQuery groupId(String groupId); GroupQuery groupName(String groupName); GroupQuery groupNameLike(String groupNameLike); GroupQuery groupType(String groupType); GroupQuery groupMember(String groupMemberUserId); GroupQuery potentialStarter(String procDefId); GroupQuery orderByGroupId(); GroupQuery orderByGroupName(); GroupQuery orderByGroupType();}</span>
仔细一看上面的源码,又是一些关于自身的查询类的操作,比如通过用户组名称、用户组类型、根据用户组ID或者名称排序之类的操作。
GroupQueryImpl类
该类既继承AbstractQuery抽喜类,又实现了GroupQuery接口,一举两得,同时拥有了Query接口和GroupQuery接口的所有方法。
IdentityService接口
<span style="font-family:Comic Sans MS;font-size:18px;">public interface IdentityService { User newUser(String userId); void saveUser(User user); UserQuery createUserQuery(); NativeUserQuery createNativeUserQuery(); void deleteUser(String userId); Group newGroup(String groupId); GroupQuery createGroupQuery(); NativeGroupQuery createNativeGroupQuery(); void saveGroup(Group group); void deleteGroup(String groupId); void createMembership(String userId, String groupId); void deleteMembership(String userId, String groupId); boolean checkPassword(String userId, String password); void setAuthenticatedUserId(String authenticatedUserId); void setUserPicture(String userId, Picture picture); Picture getUserPicture(String userId); void setUserInfo(String userId, String key, String value); String getUserInfo(String userId, String key); List<String> getUserInfoKeys(String userId); void deleteUserInfo(String userId, String key);}</span>
通过上述源码,我们可以看出,该接口主要用来管理用户组和用户的增删改查,其中关于查询的部分,又简介的依赖于UserQuery接口,这样就可以方便的进行查询操作了。
以上就是Activiti底层有关查询的API的封装。说了这么多我们来通过一个实例来看一下。
<span style="font-family:Comic Sans MS;font-size:18px;">package org.crazyit.activiti;import java.util.List;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.Group;public class ListPage {/** * @param args */public static void main(String[] args) {// 创建流程引擎ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();// 得到身份服务组件实例IdentityService identityService = engine.getIdentityService();// 写入5条用户组数据createGroup(identityService, "1", "userA", "typeA");createGroup(identityService, "2", "userB", "typeB");createGroup(identityService, "3", "userC", "typeC");createGroup(identityService, "4", "userD", "typeD");createGroup(identityService, "5", "userE", "typeE");// 调用listPage方法,从索引为2的记录开始,查询3条记录List<Group> datas = identityService.createGroupQuery().listPage(2, 3);for (Group data : datas) {System.out.println(data.getId() + "---" + data.getName() + " ");}List<Group> datas0 = identityService.createGroupQuery().list();for (Group data : datas0) {System.out.println(data.getId() + "---" + data.getName() + " ");}// 查询名称为userB的记录Group groupB = identityService.createGroupQuery().groupName("userB").singleResult();System.out.println(groupB.getId() + "---" + groupB.getName());System.out.println("asc排序结果");List<Group> datas2 = identityService.createGroupQuery().orderByGroupId().asc().list();for (Group data : datas2) {System.out.print(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);}}</span>
上面讲解了这么多,通过学习Activit底层的封装操作,我们也可以按照这种思想,来封装属于我们底层的操作,尤其是对于一些ERP一类的系统,这种封装值得借鉴和学习。
- Activiti入门教程六(详解Activiti中的查询API)
- Activiti入门教程一(初步认识Activiti)
- Activiti入门教程
- Activiti入门教程七(玩转存储引擎API)
- Activiti入门教程八(玩转Task任务API)
- Activiti入门教程九(玩转RuntimeService流程控制API)
- Activiti工作流(3):activiti核心API
- Activiti入门教程三(详解流程引擎配置)
- Activiti入门教程五(详解ProcessEngine的创建)
- Activiti入门教程十(详解历史服务组件HistoryService)
- Activiti入门教程十(详解历史服务组件HistoryService)
- activiti查询
- Activiti工作流学习(六)
- Activiti入门教程四(自定义Activiti命令拦截器)
- Activiti入门教程二(熟悉数据库设计)
- Activiti工作流入门教程
- Activiti最全入门教程
- activiti
- iOS开发不借助第三方控件实现侧边栏效果
- MapReduce案例学习开篇
- 用于解析Json数据的HttpUtils工具类
- 数组和指针内存分配示例代码
- 自学安卓复习基础_之十(使用适配器BaseAdapter来实现listView的CRD)
- Activiti入门教程六(详解Activiti中的查询API)
- iOS之旅--首尾式动画初学总结
- iOS中URL问题
- spring技术内幕之spring mvc
- Git使用流程
- unsigned 隐式转换
- 多态疑难点
- 【Linux】最常用的20条命令
- HTTPS协议和SSL/TLS协议