Skip to content

Commit eeb84eb

Browse files
committed
因为两个 updateByExample 是批量更新,所以不需要乐观锁控制。
1 parent 132f8ee commit eeb84eb

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

base/src/main/java/tk/mybatis/mapper/provider/ExampleProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public String updateByExampleSelective(MappedStatement ms) {
142142
sql.append(SqlHelper.exampleHasAtLeastOneCriteriaCheck("example"));
143143
}
144144
sql.append(SqlHelper.updateTable(entityClass, tableName(entityClass), "example"));
145-
sql.append(SqlHelper.updateSetColumns(entityClass, "record", true, isNotEmpty()));
145+
sql.append(SqlHelper.updateSetColumnsIgnoreVersion(entityClass, "record", true, isNotEmpty()));
146146
sql.append(SqlHelper.updateByExampleWhereClause());
147147
return sql.toString();
148148
}
@@ -164,7 +164,7 @@ public String updateByExample(MappedStatement ms) {
164164
sql.append(SqlHelper.exampleHasAtLeastOneCriteriaCheck("example"));
165165
}
166166
sql.append(SqlHelper.updateTable(entityClass, tableName(entityClass), "example"));
167-
sql.append(SqlHelper.updateSetColumns(entityClass, "record", false, false));
167+
sql.append(SqlHelper.updateSetColumnsIgnoreVersion(entityClass, "record", false, false));
168168
sql.append(SqlHelper.updateByExampleWhereClause());
169169
return sql.toString();
170170
}

core/src/main/java/tk/mybatis/mapper/mapperhelper/SqlHelper.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,44 @@ public static String updateSetColumns(Class<?> entityClass, String entityName, b
511511
return sql.toString();
512512
}
513513

514+
/**
515+
* update set列,不考虑乐观锁注解 @Version
516+
*
517+
* @param entityClass
518+
* @param entityName 实体映射名
519+
* @param notNull 是否判断!=null
520+
* @param notEmpty 是否判断String类型!=''
521+
* @return
522+
*/
523+
public static String updateSetColumnsIgnoreVersion(Class<?> entityClass, String entityName, boolean notNull, boolean notEmpty) {
524+
StringBuilder sql = new StringBuilder();
525+
sql.append("<set>");
526+
//获取全部列
527+
Set<EntityColumn> columnSet = EntityHelper.getColumns(entityClass);
528+
// 逻辑删除列
529+
EntityColumn logicDeleteColumn = null;
530+
//当某个列有主键策略时,不需要考虑他的属性是否为空,因为如果为空,一定会根据主键策略给他生成一个值
531+
for (EntityColumn column : columnSet) {
532+
if (column.getEntityField().isAnnotationPresent(LogicDelete.class)) {
533+
if (logicDeleteColumn != null) {
534+
throw new LogicDeleteException(entityClass.getCanonicalName() + " 中包含多个带有 @LogicDelete 注解的字段,一个类中只能存在一个带有 @LogicDelete 注解的字段!");
535+
}
536+
logicDeleteColumn = column;
537+
}
538+
if (!column.isId() && column.isUpdatable()) {
539+
if (column == logicDeleteColumn) {
540+
sql.append(logicDeleteColumnEqualsValue(column, false)).append(",");
541+
} else if (notNull) {
542+
sql.append(SqlHelper.getIfNotNull(entityName, column, column.getColumnEqualsHolder(entityName) + ",", notEmpty));
543+
} else {
544+
sql.append(column.getColumnEqualsHolder(entityName) + ",");
545+
}
546+
}
547+
}
548+
sql.append("</set>");
549+
return sql.toString();
550+
}
551+
514552
/**
515553
* 不是所有参数都是 null 的检查
516554
*

0 commit comments

Comments
 (0)