定义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)方法,增加实体对象的版本号。这个版本号可以用于乐观锁等并发控制的机制。
标签:语句,调用,插入,dbSqlSessionFactory,新增,entity,工作,实例,insertStatement From: https://www.cnblogs.com/zqlmianshi/p/18125987