今天折腾了大半天,就搞这东西了,不太熟悉这个东西,需要导出找资料和文档。
也感谢网上的一些小伙伴提供的一些资料,提供了很多帮助,也让我有了一些想法:
https://www.jianshu.com/p/58ee7e09fc3f
可以参考这位小伙伴的操作步骤,我也是在这基础上再做的一些改进。
在这位小伙伴的基础上,我发现有很多东西没有生成,或者生成有问题,比如:
- 项目实体类如果有父类,子类还是会生成父类中已经包含的字段
- 实体类中没有生成serialVersionUID(本人有强迫症,看着一堆警告难受)
- 没有注释,或者注释不是我们需要表达的意思
针对上面提出的问题一项一项进行优化。
- 项目实体类如果有父类,子类还是会生成父类中已经包含的字段
首先需要定义我们哪些字段需要忽略。(当然也有很多人是将公共实体的父类打包成jar来实现的)private final String IGNORE_FIELDS = "ignoreFields";
然后针对配置进行解析(我这里偷懒了,直接逗号分隔字段名称。。。实用就好)
// 将需要忽略生成的属性过滤掉 String ignoreFields = getIgnoreFields(); if (null != ignoreFields && !"".equals(ignoreFields)) { String[] field = ignoreFields.split(","); for (String ignoreField : field) { for (int i = 0; i < fields.size(); i++) { Field tableField = fields.get(i); if (ignoreField.equalsIgnoreCase(tableField.getName())) { fields.remove(tableField); i--; } } } }
最后再附上generatorConfig.xml中的配置代码
<plugin type="org.mybatis.generator.plugins.LombokPlugin"> <property name="generatorSerialVersionUID" value="true" /> <property name="ignoreFields" value="id,enabled,createTime,createBy,lastUpdateBy,lastUpdateTime" /> </plugin>
- 实体类中没有生成serialVersionUID
serialVersionUID在generatorConfig.xml的属性配置在上面已经贴出来了,就不再贴了,主要给看看java部分吧String generatorSerialVersionUID = properties.getProperty(GENERATOR_SERIAL_VERSION_UID); if ("true".equals(generatorSerialVersionUID)) { generatorSerialVersionUID(topLevelClass); } /** * 生成serialVersionUID值 * * @param topLevelClass */ private void generatorSerialVersionUID(TopLevelClass topLevelClass) { Field field = new Field(); field.setFinal(true); field.setInitializationString("1L"); field.setName("serialVersionUID"); field.setStatic(true); field.setType(new FullyQualifiedJavaType("long")); field.setVisibility(JavaVisibility.PRIVATE); // context.getCommentGenerator().addFieldComment(field, introspectedTable); topLevelClass.getFields().add(0, field); }
- 没有注释,获取数据库字段的注释
这个东西当然不是必须,有了是锦上添花的事儿// 添加domain的注解 topLevelClass.addAnnotation("@Data"); topLevelClass.addAnnotation("@EqualsAndHashCode(callSuper = true)"); // topLevelClass.addAnnotation("@Builder"); // topLevelClass.addAnnotation("@NoArgsConstructor"); // topLevelClass.addAnnotation("@AllArgsConstructor"); // 添加domain的注释 StringBuilder sb = new StringBuilder("/**"); sb.append("\r\n * ").append(introspectedTable.getFullyQualifiedTable()); sb.append("\r\n * ").append(introspectedTable.getRemarks()); sb.append("\r\n * ").append("@Date ").append(getDateString()); sb.append("\r\n */"); topLevelClass.addJavaDocLine(sb.toString()); // 为每个属性添加注释 List<Field> fields = topLevelClass.getFields(); for (Field field : fields) { StringBuilder fieldSb = new StringBuilder(); field.addJavaDocLine("/**"); fieldSb.append(" * "); String fieldName = field.getName(); // java字段名是驼峰的,需要转成下划线分割 String underlineFieldName = camelToUnderline(fieldName); IntrospectedColumn introspectedColumn = introspectedTable.getColumn(underlineFieldName); if (null == introspectedColumn) { continue; } fieldSb.append(introspectedColumn.getRemarks()); field.addJavaDocLine(fieldSb.toString().replace("\n", " ")); field.addJavaDocLine(" */"); }
最后,记得在pom.xml中配置mybatis-generator哦
<dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.6</version> </dependency>
将编译好的class文件替换进mybatis-generator-core中就好了,直接运行就OK了。
想偷懒的小伙伴就直接上这里来下载已经编译好的jar和源码包吧
https://download.csdn.net/download/yyhlichao/10811284