Activiti入门教程六(详解Activiti中的查询API)

 

     这篇博客呢,主要通过用户组为例,在把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一类的系统,这种封装值得借鉴和学习。



评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值