代码生成(Version 3.4.0+):后端实体类EntityName被replace掉跟表prefix前缀的相同内容

Blade 未结 1 181
北京智鼎优源
北京智鼎优源 2024-08-06 17:12

一、该问题的重现步骤是什么?

1. 代码生成工具,如果数据表是s_xxxx_syyyy,,表单replace后生成的实体类名称是Xxxxyyyy。中间第二个s也被替换掉了。预期至少应该是XxxxSyyyyy

image.png


Bladex 3.4.0版本发现问题, 查看4.0版本也没修复。
问题排查Bladex项目下的develop模块代码问题

if (tableName.contains(StringPool.UNDERSCORE)) {
    tableInfo.setEntityName(tableInfo.getEntityName().replace(StringUtil.firstCharToUpper(tableName.split(StringPool.UNDERSCORE)[0]), StringPool.EMPTY));
}


if (tableName.contains(StringPool.UNDERSCORE)) 先判定数据表是否含有下划线"_"。
如果含有下划线,之后执行的replace方法有问题,因为被替换的字符串内容获取到的是StringUtil.firstCharToUpper(tableName.split(StringPool.UNDERSCORE)[0] 对于本例来说就是"S"。
断点调试本例tableInfo.getEntityName() =“SXxxxSyyyy"。
最终就是“SXxxxSyyyy".replace("S", StringPool.EMPTY) 结果等于Xxxxyyyy。


官方和大家可以按需修改。

由于我们这边实体类需要保留表prefix(有一些表只是prefix前缀不一样)。当表名是s_xxxx_syyyy实体类是SXxxxSyyyy所以直接去掉了 bladex原有的处理直接返回,

if (iterator.hasNext()) {
    tableInfo = iterator.next();
    return tableInfo;
}
return null;



1条回答
提交回复