Mybatis Generator 结合Lombok使用,不生成get,set,生成数据库注释

今天折腾了大半天,就搞这东西了,不太熟悉这个东西,需要导出找资料和文档。

也感谢网上的一些小伙伴提供的一些资料,提供了很多帮助,也让我有了一些想法:

https://www.jianshu.com/p/58ee7e09fc3f

可以参考这位小伙伴的操作步骤,我也是在这基础上再做的一些改进。

在这位小伙伴的基础上,我发现有很多东西没有生成,或者生成有问题,比如:

  1. 项目实体类如果有父类,子类还是会生成父类中已经包含的字段
  2. 实体类中没有生成serialVersionUID(本人有强迫症,看着一堆警告难受)
  3. 没有注释,或者注释不是我们需要表达的意思

针对上面提出的问题一项一项进行优化。

  1.  项目实体类如果有父类,子类还是会生成父类中已经包含的字段
    首先需要定义我们哪些字段需要忽略。(当然也有很多人是将公共实体的父类打包成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>

     

  2. 实体类中没有生成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);
    }
  3. 没有注释,获取数据库字段的注释
    这个东西当然不是必须,有了是锦上添花的事儿
    // 添加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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值