工作流新增实例

定义xml: org.activiti.db.mapping.entity.insertHistoricTaskInstance

调用:org.activiti.engine.impl.db;

类:DbSqlSession
方法:protected void flushRegularInsert(Entity entity, Class<? extends Entity> clazz) {
String insertStatement = this.dbSqlSessionFactory.getInsertStatement(entity);
insertStatement = this.dbSqlSessionFactory.mapStatement(insertStatement);
if (insertStatement == null) {
throw new ActivitiException("no insert statement for " + entity.getClass() + " in the ibatis mapping files");
} else {
log.debug("inserting: {}", entity);
this.sqlSession.insert(insertStatement, entity);
if (entity instanceof HasRevision) {
this.incrementRevision(entity);
}

}
}

解析如下:

1.首先,通过调用this.dbSqlSessionFactory.getInsertStatement(entity)获取实体类对应的插入语句。这个语句会在mybatis的映射文件中定义。

2.调用this.dbSqlSessionFactory.mapStatement(insertStatement)方法,将获取到的插入语句进行映射,得到具体的SQL语句。这个方法会根据mybatis的配置文件中定义的映射规则进行转换。

3.判断是否成功获取到了插入语句,如果插入语句为null,则抛出一个ActivitiException异常,表示找不到实体类的插入语句。

4.如果成功获取到了插入语句,则打印调试日志,表示当前正在执行插入操作。

5.调用this.sqlSession.insert(insertStatement, entity)方法,执行插入操作。使用mybatis的SqlSession对象,将插入语句和实体对象作为参数,执行数据库插入操作。

6.如果实体对象实现了HasRevision接口,则调用this.incrementRevision(entity)方法,增加实体对象的版本号。这个版本号可以用于乐观锁等并发控制的机制。

 

posted @ 2024-04-10 14:35  人在代码在  阅读(3)  评论(0编辑  收藏  举报