Skip to content

增加指定字段强制更新(包含null)方法 #647

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
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