Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,13 @@ public interface UpdateByPrimaryKeySelectiveForceMapper<T> {
*/
@UpdateProvider(type = UpdateByPrimaryKeySelectiveForceProvider.class, method = "dynamicSQL")
int updateByPrimaryKeySelectiveForce(@Param("record") T record, @Param("forceUpdateProperties") List<String> forceUpdateProperties);

/**
* 根据主键更新属性的值, 指定的属性(null值)会被强制更新
* @param record
* @param forceUpdateProperties
* @return
*/
@UpdateProvider(type = UpdateByPrimaryKeySelectiveForceProvider.class, method = "dynamicSQL")
int updateByPrimaryKeyForce(@Param("record") T record, @Param("forceUpdateProperties") List<String> forceUpdateProperties);
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,15 +51,25 @@ public UpdateByPrimaryKeySelectiveForceProvider(Class<?> mapperClass, MapperHelp


public String updateByPrimaryKeySelectiveForce(MappedStatement ms) {
Class entityClass = getEntityClass(ms);
Class<?> entityClass = getEntityClass(ms);
StringBuilder sql = new StringBuilder();
sql.append(SqlHelper.updateTable(entityClass, tableName(entityClass), "record"));
sql.append(this.updateSetColumnsForce(entityClass, "record", true, isNotEmpty()));
sql.append(SqlHelper.wherePKColumns(entityClass, "record", true));

return sql.toString();
}

public String updateByPrimaryKeyForce(MappedStatement ms) {
Class<?> entityClass = getEntityClass(ms);
StringBuilder sql = new StringBuilder();
sql.append(SqlHelper.updateTable(entityClass, tableName(entityClass), "record"));
sql.append(this.updateSetColumnsForce(entityClass, "record", false, false));
sql.append(SqlHelper.wherePKColumns(entityClass, "record", true));

return sql.toString();
}

/**
* update set列
*
Expand Down Expand Up @@ -93,10 +103,8 @@ public String updateSetColumnsForce(Class<?> entityClass, String entityName, boo
.append(" = ${@tk.mybatis.mapper.version.VersionUtil@nextVersion(")
.append("@").append(versionClass).append("@class, ")
.append(column.getProperty()).append(")},");
} else if (notNull) {
sql.append(this.getIfNotNull(entityName, column, column.getColumnEqualsHolder(entityName) + ",", notEmpty));
} else {
sql.append(column.getColumnEqualsHolder(entityName) + ",");
sql.append(this.getIf(entityName, column, column.getColumnEqualsHolder(entityName) + ",", notNull, notEmpty));
}
}
}
Expand All @@ -105,32 +113,34 @@ public String updateSetColumnsForce(Class<?> entityClass, String entityName, boo
}

/**
* 判断自动!=null的条件结构
*
* 判断条件结构
* @param entityName
* @param column
* @param contents
* @param notNull
* @param empty
* @return
*/
public String getIfNotNull(String entityName, EntityColumn column, String contents, boolean empty) {
public String getIf(String entityName, EntityColumn column, String contents, boolean notNull, boolean empty) {
StringBuilder sql = new StringBuilder();
sql.append("<choose>");
sql.append("<when test=\"");
if (StringUtil.isNotEmpty(entityName)) {
sql.append(entityName).append(".");
}
sql.append(column.getProperty()).append(" != null");
if (empty && column.getJavaType().equals(String.class)) {
sql.append(" and ");
if (StringUtil.isNotEmpty(entityName)) {
sql.append(entityName).append(".");
}
sql.append(column.getProperty()).append(" != '' ");
if (notNull) {
sql.append("<when test=\"");
if (StringUtil.isNotEmpty(entityName)) {
sql.append(entityName).append(".");
}
sql.append(column.getProperty()).append(" != null");
if (empty && column.getJavaType().equals(String.class)) {
sql.append(" and ");
if (StringUtil.isNotEmpty(entityName)) {
sql.append(entityName).append(".");
}
sql.append(column.getProperty()).append(" != '' ");
}
sql.append("\">");
sql.append(contents);
sql.append("</when>");
}
sql.append("\">");
sql.append(contents);
sql.append("</when>");

//指定的字段会被强制更新
sql.append("<when test=\"");
Expand Down