关键时刻发现我并不会,于是下定决心研究一下,发现jbpm4还是有些不尽人意,比如历史变量的保存问题就很让人郁闷。
获得jbpm4 hibernate session
/***@author
yhy
* 获得JBPM session
* @return Session:hibernate Session
*/
public Session getTaskSession(){
EnvironmentFactory environmentFactory = (EnvironmentFactory)
getProcessEngine();
Environment environment = environmentFactory.openEnvironment();
Session session = null;
try{
session = environment.get(Session.class);
}catch(Exception e){
e.printStackTrace();
}
return session;
}
创建query()
/**
* 创建query查询
* @param hql hql查询语句
* @return Query query查询器
*/
public Query creatQuery(String hql){
return getTaskSession().createQuery(hql);
}
分页查询
/**
* 分页查询
* @param sql hql sql
* @param pageSize 每页显示的数量
* @param ipage 页码
* @param parameterMap 参数map
* @return List 结果
*/
public List pageQuery(String sql, int pageSize,int ipage,Map<String, Object> parameterMap){
Query query = creatQuery(sql);
int startResult = (ipage -1)*pageSize + 1;
if (pageSize > 0 && startResult > 0) {
query.setFirstResult(startResult);
query.setMaxResults(pageSize);
}
//设置hql查询参数
parameterMap = parameterMap == null ? new HashMap<String, Object>() : parameterMap;
for (String key : parameterMap.keySet()) {
if (key != null && !"".equals(key)) {
Object value = parameterMap.get(key);
if (value != null) {
query.setParameter(key, value);
}
}
}
//返回结果
return query.list();
}
统计方法
/**
* 普通HQL统计查询
* @param sql 统计HQL
* @param parameterMap 参数map
* @return int 统计数
*/
@SuppressWarnings("unchecked")
public int query(String countSql, Map<String, Object> parameterMap){
Query query = creatQuery(countSql);
parameterMap = parameterMap == null ? new HashMap<String, Object>() : parameterMap;
for (String key : parameterMap.keySet()) { //进行迭代
if (key != null && !"".equals(key)) {
Object value = parameterMap.get(key);
if (value != null) {
query.setParameter(key, value); //加入查询条件
}
}
}
List list = query.list();
return ((Long) list.get(0)).intValue();
}
查询方法
/**
* 任务查询
* @return FindResult 查询结果
*/
public FindResult queryTask(int ipage,Map<String, String> formMap){
List result = new ArrayList();
String taskName = formMap.get("taskName");
Integer userId = (Integer) WebUtils.getAttribute("userId");
if(userId == null){
logger.info("[session已过期或者没有登录!请重新登录再试!]");
return new FindResult();
}
Map<String, Object> paramsMap = new HashMap();
paramsMap.put("userId", userId.toString());
String sql = "from org.jbpm.pvm.internal.task.ParticipationImpl t where t.userId = :userId";
String countsql = "select count(t.dbid) from org.jbpm.pvm.internal.task.ParticipationImpl t where t.userId = :userId";
if(StringUtils.isNotBlank(taskName)){
sql = sql + " and t.task.name = :taskName";
countsql = countsql + " and t.task.name = :taskName";
paramsMap.put("taskName", taskName);
}
int rowCount = JbpmUtils.query(countsql, paramsMap);
List<ParticipationImpl> list = JbpmUtils.pageQuery(sql, QcConstant.PAGE_SIZE, ipage, paramsMap);
for(ParticipationImpl task : list){
String exerciser = (String) task.getTask().getVariable("users");
Map map = new HashMap();
map.put("任务ID", task.getTask().getId());
map.put("任务名称", task.getTask().getName());
map.put("创建时间", task.getTask().getCreateTime());
map.put("执行人", exerciser.substring(exerciser.indexOf(",")+1));
map.put("form", task.getTask().getFormResourceName());
map.put("recordingId", JbpmUtils.getTaskService().getVariable(task.getTask().getId(), "recordingId"));
result.add(map);
}
FindResult findResult = new FindResult();
findResult.setResult(result);
findResult.setRowCount(rowCount);
findResult.setPageCount(getPageNum(rowCount));
return findResult;
}
FindResult的代码如下:
public class FindResult<T> {
/**
* 总页数
*/
private int pageCount;
/**
* 总行数
*/
private int rowCount;
/**
* 结果集
*/
private List<T> result;
public int getPageCount() {
if (result == null)
pageCount = 0;
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
public List<T> getResult() {
if (result == null)
result = new java.util.ArrayList<T>();
return result;
}
public void setResult(List<T> result) {
this.result = result;
}
public int getRowCount() {
if (result == null)
rowCount = 0;
return rowCount;
}
public void setRowCount(int rowCount) {
this.rowCount = rowCount;
}
}
分享到:
相关推荐
- **分页展示**:包括当前页码、每页显示条数、总记录数以及分页导航元素(如首页、上一页、下一页、尾页)。 - **分页Bean设计**:`PageView`类是实现分页功能的核心,包含以下属性: - `currentPage`:当前页码。...
28. **分页技术**:PageBean是一种Java中用于实现分页功能的对象,封装了分页的相关信息,如当前页、总页数、每页记录数等,简化了分页逻辑。 这些知识点涵盖了Java开发的多个方面,包括构建工具、框架、数据库、...
- **方法重载**:同一类中方法名相同但参数列表不同的多个方法。 ##### StringBuffer、StringBuilder与String的区别 - **String**:不可变字符串,适用于频繁读取而很少修改的情况。 - **StringBuilder**:可变...
- **基本示例**:通过示例了解JBPM的基本使用流程,如定义流程、启动流程实例、任务分配等。 - **借款申请流程**:以具体的业务场景为例,演示如何使用JBPM实现审批流程。 #### 其他实用技术 - **FCKEditor**:一...
python学习资源
jfinal-undertow 用于开发、部署由 jfinal 开发的 web 项目
基于Andorid的音乐播放器项目设计(国外开源)实现源码,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。
python学习资源
python学习资源
python学习一些项目和资源
【毕业设计】java-springboot+vue家具销售平台实现源码(完整前后端+mysql+说明文档+LunW).zip
HTML+CSS+JavaScarip开发的前端网页源代码
python学习资源
【毕业设计】java-springboot-vue健身房信息管理系统源码(完整前后端+mysql+说明文档+LunW).zip
成绩管理系统C/Go。大学生期末小作业,指针实现,C语言版本(ANSI C)和Go语言版本
1_基于大数据的智能菜品个性化推荐与点餐系统的设计与实现.docx
【毕业设计】java-springboot-vue交流互动平台实现源码(完整前后端+mysql+说明文档+LunW).zip
内容概要:本文主要探讨了在高并发情况下如何设计并优化火车票秒杀系统,确保系统的高性能与稳定性。通过对比分析三种库存管理模式(下单减库存、支付减库存、预扣库存),强调了预扣库存结合本地缓存及远程Redis统一库存的优势,同时介绍了如何利用Nginx的加权轮询策略、MQ消息队列异步处理等方式降低系统压力,保障交易完整性和数据一致性,防止超卖现象。 适用人群:具有一定互联网应用开发经验的研发人员和技术管理人员。 使用场景及目标:适用于电商、票务等行业需要处理大量瞬时并发请求的业务场景。其目标在于通过合理的架构规划,实现在高峰期保持平台的稳定运行,保证用户体验的同时最大化销售额。 其他说明:文中提及的技术细节如Epoll I/O多路复用模型以及分布式系统中的容错措施等内容,对于深入理解大规模并发系统的构建有着重要指导意义。
基于 OpenCV 和 PyTorch 的深度车牌识别
【毕业设计-java】springboot-vue教学资料管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip