Mybatis-plus在执行Insert操作时怎么自动添加tenant_id字段
- JsqlParserSupport.processParser
2. TenantLineInnerInterceptor.processInsert
- 通过columns.add(new Column(tenantLineHandler.getTenantIdColumn()));添加tenant_id字段
- .getExpressions().add(tenantLineHandler.getTenantId()); 租户id赋值
@Override
protected void processInsert(Insert insert, int index, String sql, Object obj) {
if (tenantLineHandler.ignoreTable(insert.getTable().getName())) {
// 过滤退出执行
return;
}
List<Column> columns = insert.getColumns();
if (CollectionUtils.isEmpty(columns)) {
// 针对不给列名的insert 不处理
return;
}
String tenantIdColumn = tenantLineHandler.getTenantIdColumn();
if (columns.stream().map(Column::getColumnName).anyMatch(i -> i.equals(tenantIdColumn))) {
// 针对已给出租户列的insert 不处理
return;
}
//注意 给Insert添加tenant_id字段
**columns.add(new Column(tenantLineHandler.getTenantIdColumn()));**
Select select = insert.getSelect();
if (select != null) {
this.processInsertSelect(select.getSelectBody());
} else if (insert.getItemsList() != null) {
// fixed github pull/295
ItemsList itemsList = insert.getItemsList();
//====》此处给tenant_id 赋值
if (itemsList instanceof MultiExpressionList) {
((MultiExpressionList) itemsList).getExprList().forEach(el -> el.getExpressions().add(tenantLineHandler.getTenantId()));
} else {
((ExpressionList) itemsList).getExpressions().add(tenantLineHandler.getTenantId());
}
} else {
throw ExceptionUtils.mpe("Failed to process multiple-table update, please exclude the tableName or statementId");
}
}
-
tenantLineHandler.getTenantIdColumn()
-
tenantLineHandler.getTenantId()
租户id的取值实际调用的是MybatisPlusSaasConfig中的mybatisPlusInterceptor里的getTenantId()