diff --git a/generator/src/main/java/tk/mybatis/mapper/generator/MapperPlugin.java b/generator/src/main/java/tk/mybatis/mapper/generator/MapperPlugin.java
index b51ab218461eb41228f0ed7de78a6ce78346424c..27ff961a3d0fe15246ca42b213cb912c06a0196b 100644
--- a/generator/src/main/java/tk/mybatis/mapper/generator/MapperPlugin.java
+++ b/generator/src/main/java/tk/mybatis/mapper/generator/MapperPlugin.java
@@ -65,6 +65,8 @@ public class MapperPlugin extends FalseMethodPlugin {
private boolean needsAccessors = false;
//是否需要生成EqualsAndHashCode注解
private boolean needsEqualsAndHashCode = false;
+ //是否需要生成EqualsAndHashCode注解,并且“callSuper = true”
+ private boolean needsEqualsAndHashCodeAndCallSuper = false;
//是否生成字段名常量
private boolean generateColumnConsts = false;
//是否生成默认的属性的静态方法
@@ -113,40 +115,46 @@ public class MapperPlugin extends FalseMethodPlugin {
* @param introspectedTable
*/
private void processEntityClass(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
- //引入JPA注解
+ // 引入JPA注解
topLevelClass.addImportedType("javax.persistence.*");
- //lombok扩展开始
- //如果需要Data,引入包,代码增加注解
+ // lombok扩展开始
+ // 如果需要Data,引入包,代码增加注解
if (this.needsData) {
topLevelClass.addImportedType("lombok.Data");
topLevelClass.addAnnotation("@Data");
}
- //如果需要Getter,引入包,代码增加注解
+ // 如果需要Getter,引入包,代码增加注解
if (this.needsGetter) {
topLevelClass.addImportedType("lombok.Getter");
topLevelClass.addAnnotation("@Getter");
}
- //如果需要Setter,引入包,代码增加注解
+ // 如果需要Setter,引入包,代码增加注解
if (this.needsSetter) {
topLevelClass.addImportedType("lombok.Setter");
topLevelClass.addAnnotation("@Setter");
}
- //如果需要ToString,引入包,代码增加注解
+ // 如果需要ToString,引入包,代码增加注解
if (this.needsToString) {
topLevelClass.addImportedType("lombok.ToString");
topLevelClass.addAnnotation("@ToString");
}
- //如果需要Getter,引入包,代码增加注解
+ // 如果需要EqualsAndHashCode,并且“callSuper = true”,引入包,代码增加注解
+ if (this.needsEqualsAndHashCodeAndCallSuper) {
+ topLevelClass.addImportedType("lombok.EqualsAndHashCode");
+ topLevelClass.addAnnotation("@EqualsAndHashCode(callSuper = true)");
+ } else {
+ // 如果需要EqualsAndHashCode,引入包,代码增加注解
+ if (this.needsEqualsAndHashCode) {
+ topLevelClass.addImportedType("lombok.EqualsAndHashCode");
+ topLevelClass.addAnnotation("@EqualsAndHashCode");
+ }
+ }
+ // 如果需要Accessors,引入包,代码增加注解
if (this.needsAccessors) {
topLevelClass.addImportedType("lombok.experimental.Accessors");
topLevelClass.addAnnotation("@Accessors(chain = true)");
}
- //如果需要Getter,引入包,代码增加注解
- if (this.needsEqualsAndHashCode) {
- topLevelClass.addImportedType("lombok.EqualsAndHashCode");
- topLevelClass.addAnnotation("@EqualsAndHashCode");
- }
- //lombok扩展结束
+ // lombok扩展结束
// region swagger扩展
if (this.needsSwagger) {
//导包
@@ -161,13 +169,13 @@ public class MapperPlugin extends FalseMethodPlugin {
}
// endregion swagger扩展
String tableName = introspectedTable.getFullyQualifiedTableNameAtRuntime();
- //如果包含空格,或者需要分隔符,需要完善
+ // 如果包含空格,或者需要分隔符,需要完善
if (StringUtility.stringContainsSpace(tableName)) {
tableName = context.getBeginningDelimiter()
+ tableName
+ context.getEndingDelimiter();
}
- //是否忽略大小写,对于区分大小写的数据库,会有用
+ // 是否忽略大小写,对于区分大小写的数据库,会有用
if (caseSensitive && !topLevelClass.getType().getShortName().equals(tableName)) {
topLevelClass.addAnnotation("@Table(name = \"" + getDelimiterName(tableName) + "\")");
} else if (!topLevelClass.getType().getShortName().equalsIgnoreCase(tableName)) {
@@ -216,7 +224,7 @@ public class MapperPlugin extends FalseMethodPlugin {
}
if (introspectedColumn.getDefaultValue() != null) {
String defaultValue = introspectedColumn.getDefaultValue();
- //去除前后'',如 '123456' -> 123456
+ // 去除前后'',如 '123456' -> 123456
if (defaultValue.startsWith("'") && defaultValue.endsWith("'")) {
if (defaultValue.length() == 2) {
defaultValue = "";
@@ -224,7 +232,7 @@ public class MapperPlugin extends FalseMethodPlugin {
defaultValue = defaultValue.substring(1, defaultValue.length() - 1);
}
}
- //暂不支持时间类型默认值识别,不同数据库表达式不同
+ // 暂不支持时间类型默认值识别,不同数据库表达式不同
if ("Boolean".equals(shortName)) {
if ("0".equals(defaultValue)) {
defaultValue = "false";
@@ -232,7 +240,7 @@ public class MapperPlugin extends FalseMethodPlugin {
defaultValue = "true";
}
}
- //通过 new 方法转换
+ // 通过 new 方法转换
defaultMethod.addBodyLine(String.format("instance.%s = new %s(\"%s\");", introspectedColumn.getJavaProperty(), shortName, defaultValue));
}
@@ -337,20 +345,23 @@ public class MapperPlugin extends FalseMethodPlugin {
this.beginningDelimiter = getProperty("beginningDelimiter", "");
this.endingDelimiter = getProperty("endingDelimiter", "");
this.schema = getProperty("schema");
- //lombok扩展
+ // lombok扩展
String lombok = getProperty("lombok");
if (lombok != null && !"".equals(lombok)) {
this.needsData = lombok.contains("Data");
- //@Data 优先级高于 @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode
+ // @Data 优先级高于 @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode
this.needsGetter = !this.needsData && lombok.contains("Getter");
this.needsSetter = !this.needsData && lombok.contains("Setter");
this.needsToString = !this.needsData && lombok.contains("ToString");
this.needsEqualsAndHashCode = !this.needsData && lombok.contains("EqualsAndHashCode");
+ // 配置lombok扩展EqualsAndHashCode注解是否添加“callSuper = true”
+ String lombokEqualsAndHashCodeCallSuper = getProperty("lombokEqualsAndHashCodeCallSuper", "false");
+ this.needsEqualsAndHashCodeAndCallSuper = this.needsEqualsAndHashCode && "TRUE".equalsIgnoreCase(lombokEqualsAndHashCodeCallSuper);
this.needsAccessors = lombok.contains("Accessors");
}
- //swagger扩展
+ // swagger扩展
String swagger = getProperty("swagger", "false");
- if ("true".equalsIgnoreCase(swagger)) {
+ if ("TRUE".equalsIgnoreCase(swagger)) {
this.needsSwagger = true;
}
if (useMapperCommentGenerator) {
diff --git a/generator/src/test/resources/generatorConfig.xml b/generator/src/test/resources/generatorConfig.xml
index b6c0da5b00397e0f805eee67c7f873615cf1fa33..f5988c5aa011385234e4b1fe14159c051b170d1a 100644
--- a/generator/src/test/resources/generatorConfig.xml
+++ b/generator/src/test/resources/generatorConfig.xml
@@ -41,8 +41,10 @@
-
-
+
+
+
+