Commit 8223231d authored by hewei's avatar hewei

官方ConstructorBased配置BUG临时修正插件

parent df27bb11
...@@ -20,6 +20,7 @@ import com.itfsw.mybatis.generator.plugins.utils.BasePlugin; ...@@ -20,6 +20,7 @@ import com.itfsw.mybatis.generator.plugins.utils.BasePlugin;
import com.itfsw.mybatis.generator.plugins.utils.FormatTools; import com.itfsw.mybatis.generator.plugins.utils.FormatTools;
import org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.Plugin;
import org.mybatis.generator.api.dom.java.JavaVisibility; import org.mybatis.generator.api.dom.java.JavaVisibility;
import org.mybatis.generator.api.dom.java.Method; import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.Parameter; import org.mybatis.generator.api.dom.java.Parameter;
...@@ -46,57 +47,64 @@ public class ConstructorBasedBugFixPlugin extends BasePlugin { ...@@ -46,57 +47,64 @@ public class ConstructorBasedBugFixPlugin extends BasePlugin {
@Override @Override
public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
// 有种情况下ModelBaseRecordClass不会生成不包含BLOBs的构造方法,造成selectOneByExample返回结果找不到对应的构造方法异常 // 有种情况下ModelBaseRecordClass不会生成不包含BLOBs的构造方法
if (introspectedTable.hasBLOBColumns() && !introspectedTable.getRules().generateRecordWithBLOBsClass()) { if (introspectedTable.isConstructorBased() && introspectedTable.hasBLOBColumns() && introspectedTable.getBLOBColumns().size() == 1) {
// 添加没有BLOBs的构造方法 // 判断是否已经生成了对应构造函数
Method method = new Method(); String version = Plugin.class.getPackage().getImplementationVersion();
method.setVisibility(JavaVisibility.PUBLIC); if (version != null){
method.setConstructor(true); String[] strs = version.split("\\.");
method.setName(topLevelClass.getType().getShortName()); if (strs.length == 3 && strs[0].equals("1") && strs[1].equals("3") && Integer.parseInt(strs[2]) < 6){
commentGenerator.addGeneralMethodComment(method, introspectedTable); // 添加没有BLOBs的构造方法
Method method = new Method();
method.setVisibility(JavaVisibility.PUBLIC);
method.setConstructor(true);
method.setName(topLevelClass.getType().getShortName());
commentGenerator.addGeneralMethodComment(method, introspectedTable);
// 使用没有blobs的字段 // 使用没有blobs的字段
List<IntrospectedColumn> constructorColumns = introspectedTable.getNonBLOBColumns(); List<IntrospectedColumn> constructorColumns = introspectedTable.getNonBLOBColumns();
for (IntrospectedColumn introspectedColumn : constructorColumns) { for (IntrospectedColumn introspectedColumn : constructorColumns) {
method.addParameter(new Parameter(introspectedColumn.getFullyQualifiedJavaType(), introspectedColumn.getJavaProperty())); method.addParameter(new Parameter(introspectedColumn.getFullyQualifiedJavaType(), introspectedColumn.getJavaProperty()));
topLevelClass.addImportedType(introspectedColumn.getFullyQualifiedJavaType()); topLevelClass.addImportedType(introspectedColumn.getFullyQualifiedJavaType());
} }
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
if (introspectedTable.getRules().generatePrimaryKeyClass()) { if (introspectedTable.getRules().generatePrimaryKeyClass()) {
boolean comma = false; boolean comma = false;
sb.append("super("); sb.append("super(");
for (IntrospectedColumn introspectedColumn : introspectedTable.getPrimaryKeyColumns()) { for (IntrospectedColumn introspectedColumn : introspectedTable.getPrimaryKeyColumns()) {
if (comma) { if (comma) {
sb.append(", "); sb.append(", ");
} else {
comma = true;
}
sb.append(introspectedColumn.getJavaProperty());
}
sb.append(");");
method.addBodyLine(sb.toString());
}
List<IntrospectedColumn> introspectedColumns;
if (!introspectedTable.getRules().generatePrimaryKeyClass() && introspectedTable.hasPrimaryKeyColumns()) {
introspectedColumns = introspectedTable.getNonBLOBColumns();
} else { } else {
comma = true; introspectedColumns = introspectedTable.getBaseColumns();
} }
sb.append(introspectedColumn.getJavaProperty());
}
sb.append(");");
method.addBodyLine(sb.toString());
}
List<IntrospectedColumn> introspectedColumns; for (IntrospectedColumn introspectedColumn : introspectedColumns) {
if (!introspectedTable.getRules().generatePrimaryKeyClass() && introspectedTable.hasPrimaryKeyColumns()) { sb.setLength(0);
introspectedColumns = introspectedTable.getNonBLOBColumns(); sb.append("this.");
} else { sb.append(introspectedColumn.getJavaProperty());
introspectedColumns = introspectedTable.getBaseColumns(); sb.append(" = ");
} sb.append(introspectedColumn.getJavaProperty());
sb.append(';');
method.addBodyLine(sb.toString());
}
for (IntrospectedColumn introspectedColumn : introspectedColumns) { FormatTools.addMethodWithBestPosition(topLevelClass, method);
sb.setLength(0); }
sb.append("this.");
sb.append(introspectedColumn.getJavaProperty());
sb.append(" = ");
sb.append(introspectedColumn.getJavaProperty());
sb.append(';');
method.addBodyLine(sb.toString());
} }
FormatTools.addMethodWithBestPosition(topLevelClass, method);
} }
return true; return true;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment