Mybatis-plus批量更新时报语法错误(Mysql数据库)
今天通过自定义sql注入器实现了MP真正的批量插入和更新操作,具体配置可以参考这篇文章Mybatis-plus批量操作,
测试发现有两个问题:
- 批量插入时Id字段没有回填到原对象中
指定一下keyGenerator, keyProperty, keyColumn三个参数即可
public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
final String sql = "<script>insert into %s %s values %s</script>";
final String fieldSql = prepareFieldSql(tableInfo);
final String valueSql = prepareValuesSql(tableInfo);
final String sqlResult = String.format(sql, tableInfo.getTableName(), fieldSql, valueSql);
log.debug("sqlResult----->{}", sqlResult);
SqlSource sqlSource = languageDriver.createSqlSource(configuration, sqlResult, modelClass);
String keyProperty = null;
String keyColumn = null;
KeyGenerator keyGenerator = new NoKeyGenerator();
// 表包含主键处理逻辑,如果不包含主键当普通字段处理
String insertBatch = "insertBatch";
if (tableInfo.havePK()) {
if (tableInfo.getIdType() == IdType.AUTO) {
/* 自增主键 */
keyGenerator = new Jdbc3KeyGenerator();
keyProperty = tableInfo.getKeyProperty();
keyColumn = tableInfo.getKeyColumn();
} else {
if (null != tableInfo.getKeySequence()) {
keyGenerator = TableInfoHelper.genKeyGenerator(insertBatch, tableInfo, builderAssistant);
keyProperty = tableInfo.getKeyProperty();
keyColumn = tableInfo.getKeyColumn();
}
}
}
// 第三个参数必须和RootMapper的自定义方法名一致
return this.addInsertMappedStatement(mapperClass, modelClass, insertBatch, sqlSource, keyGenerator, keyProperty, keyColumn);
}
- 更新时会报错
第一个问题暂时没有解决,第二个问题经过查询资料,发现是连接数据库时少了相关配置allowMultiQueries=true
加到jdbcUrl后即可。

浙公网安备 33010602011771号