参考【SpringBoot攻略七、集成mybatisplus实战】,做如下修改:
1、自定义sql注入器GeneralMybatisPlusSqlInjector
package com.javasgj.springboot.mybatisplus.config;
import java.util.List;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
/**
* 自定义sql注入器,增加通用方法
*/
public class GeneralMybatisPlusSqlInjector extends DefaultSqlInjector {
@Override
public List<AbstractMethod> getMethodList() {
List<AbstractMethod> methodList = super.getMethodList();
// 根据id更新所有数据
methodList.add(new UpdateAllColumnById());
return methodList;
}
}
2、方法对应的实现类UpdateAllColumnById
package com.javasgj.springboot.mybatisplus.config;
import static java.util.stream.Collectors.joining;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlSource;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils;
/**
* 根据id更新所有数据
*/
public class UpdateAllColumnById extends AbstractMethod {
@Override
public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
GeneralMybatisPlusSqlMethod sqlMethod = GeneralMybatisPlusSqlMethod.UPDATE_ALL_COLUMN_BY_ID;
String sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(),
sqlSet(false, false, tableInfo, Constants.ENTITY_SPOT),
tableInfo.getKeyColumn(), Constants.ENTITY_SPOT + tableInfo.getKeyProperty(),
new StringBuilder("<if test=\"et instanceof java.util.Map\">")