mybatis-plus 自定義sql
阿新 • • 發佈:2022-04-15
自定義mybatisplus sql
自定義首先繼承於 DefaultSqlInjector 這個類 實現介面 getMethodList
@Configuration public class SqlInjector extends DefaultSqlInjector { @Override public List<AbstractMethod> 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<String>(); var fieldNames = new ArrayList<String>(); 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("<foreach collection=\"list\" index=\"index\" item=\"item\" separator=\",\">\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("</foreach>"); return builder.toString(); } }
最後一步 把這個類加入 第一步定義的SqlInjector getMethodList list 方法中
list.add(new BatchInsert())