mybatis-plus 自定义sql
自定义mybatisplus sql
自定义首先继承于 DefaultSqlInjector 这个类 实现接口 getMethodList
@Configuration
public class SqlInjector extends DefaultSqlInjector {
@Override
public List getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
var list = super.getMethodList(mapperClass, tableInfo);
list.add(....)
return list;
}
具体实现方法是 继承AbstractMethod这个类
下边是一个批量插入自定义类
public class BatchInsert extends AbstractMethod {
@Override
public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
var sqlMethod = "<script> %s \n</script>";
var sql = String.format(sqlMethod, getSql(tableInfo));
SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
return this.addSelectMappedStatementForTable(mapperClass, "batchInsert", sqlSource, tableInfo);
}
private String getSql(TableInfo tableInfo) {
var builder = new StringBuilder();
var columns = new ArrayList();
var fieldNames = new ArrayList();
columns.add(tableInfo.getKeyColumn());
fieldNames.add(tableInfo.getKeyProperty());
tableInfo.getFieldList().forEach(x -> {
columns.add(x.getColumn());
fieldNames.add(x.getField().getName());
});
builder.append(String.format(" INSERT INTO %s \n", tableInfo.getTableName()));
builder.append(String.format(" ( %s ) VALUES ", String.join(",", columns)));
builder.append("\n");
builder.append("(");
for (var i = 0; i < fieldNames.size(); i++) {
if (i != 0) {
builder.append(",");
}
builder.append(String.format("#{item.%s}", fieldNames.get(i)));
}
builder.append(") \n");
builder.append(" ");
return builder.toString();
}
}
最后一步 把这个类加入 第一步定义的SqlInjector getMethodList list 方法中
list.add(new BatchInsert())