1. 程式人生 > >Mybatis Generator 結合Lombok使用,不生成get,set,生成資料庫註釋

Mybatis Generator 結合Lombok使用,不生成get,set,生成資料庫註釋

今天折騰了大半天,就搞這東西了,不太熟悉這個東西,需要匯出找資料和文件。

也感謝網上的一些小夥伴提供的一些資料,提供了很多幫助,也讓我有了一些想法:

可以參考這位小夥伴的操作步驟,我也是在這基礎上再做的一些改進。

在這位小夥伴的基礎上,我發現有很多東西沒有生成,或者生成有問題,比如:

  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