xml生成2维码_MyBatis(2)之MyBatis-Generator最佳实践
自定義注釋
自定義注解
指定xml文件模式
上一篇文章詳細闡述了xml配置文件的各種標簽及其含義。其實從標簽開始,每一個標簽都對應一個實體類。context.class對應標簽,而每一個子標簽都對應一個屬性;如圖:
標簽與實體類的對應關系
。有了實體類的關系,那么自定義起來還不是易如反掌。
自定義添加注釋
以用數據庫中字段的注釋,作為Model屬性的注釋為例:
針對注解的標簽是,對應的接口實體類是CommentGenerator,該類中封裝了針對GetterComment、SetterComment、FieldComment、ClassComment以及xml中的注解,這些方法在生成實體類時,會通過Context被調用;該接口默認有默認的實現類DefaultCommentGenerator。切入點就是該DefaultCommentGenerator:
解釋:
自定義注解
在目前我們開發中,注解使用的非常廣發,大大簡化了我們的開發,比如:
- LomBook針對實體類對象各種注解,最常用的@Data(@Setter,@Getter)、@NoArgsConstructor等。那能否再Model上自動添加上我們需要的注解呢?
- 我們知道Spring Boot中Mapper接口對應的注解是@Repository注解,但原生生成時不會有該注解的,那要一個一個類手動添加嗎?
針對以上需求,我們詳細聊聊PluginAdapter。通過Idea查看該類的結構,可以看到該中方法非常之多,但可分為:
- clientxxxx相關的方法控制Mapper接口生成規則,細粒度到每個能夠生成的方法上
- sqlMapxxxx相關方法控制xml文件生成的方式,細粒度到每個能夠生成的方法上;
- modelxxxx相關方法控制Model類的生成規則。model類的生成規則有三種,所以model相關的方法也是關于三種規則生成時的相關方法;
- 針對以上需求,我們逐個擊破:
通過上面方法,在生成Model時會自動添加上相應的注解;再比如:Spring Boot的Swagger也是通過注解,如果返回前端的實體類也是通過Mybatis Generator自動生成,那么就可以將@ApiModel以及@ApiModelProperty注解添加到生成的類中;是不是特別的方便;
xml文件的兩種模式
在MyBatis生成的xml默認是append的方式,比如:隨著需求版本的迭代,數據庫中的字段改變,對應的實體類以及xml需要重新生成,那么默認新生成的xml內容,會追加到舊的版本中,這時啟動項目會報錯(resultMap標簽重復),所以這時需要將舊的覆蓋掉;
此時我們要干預xml文件的生成方式,那么繼承PluginAdaptor重寫sqlMapGenerated方法。該方法中GeneratedXmlFile參數是封裝xml文件的所有屬性,其中私有屬性isMergeable即是否合并的意思,默認為false,那么我們現在就要改變該屬性的值。可惜的是該屬性沒有公開,需要通過反射改變,具體如下:
@Override public boolean sqlMapGenerated(GeneratedXmlFile sqlMap, IntrospectedTable introspectedTable) { try { Field field = sqlMap.getClass().getDeclaredField("isMergeable"); field.setAccessible(true); field.setBoolean(sqlMap, false); } catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); } return true; }在生成時就會覆蓋原來的舊文件。那如果自定義的sql也寫在該文件,那么也會被覆蓋,目前我實踐的解決方案有兩種:
總結
以上是生活随笔為你收集整理的xml生成2维码_MyBatis(2)之MyBatis-Generator最佳实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JDBC单独了解一下
- 下一篇: 上海蓝光集团信息安全建设方案