mybatis-generator-修改原始碼生成自己想要的程式碼
前言
雖然mybatis-generator能生成dao,mapper,xml等檔案,但是生成的程式碼也不是完全通用,所以這裡我們要的mybatis-generator-core原始碼進行修改。
原始碼下載: https://github.com/chenxingxing6/my-mybatis-generator
場景
1.生成自己想要的註釋
/**
* 使用者資訊
*
* @author lanxinghua
* @date 2018/10/20
*/
public class UserBo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* ID
*/
private Long id;
/**
* 使用者名稱
*/
private String userName;
2.通用的表欄位,統一處理
/**
* 是否有效
*/
private Integer isValid;
/**
* 建立人
*/
private String createUser;
/**
* 建立時間
*/
private Long createTime;
/**
* 修改人
*/
private String opUser;
/**
* 修改時間
*/
private Long opTime;
/**
* 版本號
*/
private Integer lastVer;
<!-- 生成對映檔案的包名和位置 -->
<sqlMapGenerator targetPackage="com.dfire.soa.item.mapper" targetProject="src">
<!-- 欄位的初始化 -->
<columnSetting>
<insert>
<column name="is_valid" defaultValue="1"/>
<column name="create_time" defaultValue="unix_timestamp(now(3))*1000"/>
<column name="op_time" defaultValue="unix_timestamp(now(3))*1000"/>
<column name="last_ver" defaultValue="0"/>
</insert>
<update>
<column name="op_time" defaultValue="unix_timestamp(now(3))*1000"/>
<column name="last_ver" defaultValue="last_ver + 1"/>
<column name="create_time" hide="true"/>
</update>
</columnSetting>
</sqlMapGenerator>
3.我們資料庫欄位型別是tinyint,smallint的對應java型別為byte,而我們要Integer
javaTypeResolver type="org.mybatis.generator.internal.types.PandaJavaTypeResolverDefaultImpl"/>
這裡我們那生成註釋舉例子
我的想法
主要步驟就是,修改對應原始碼的類,比如我們對預設的註釋不滿意,那我們自己寫一個類然後繼承預設的類,然後實現自己的邏輯。然後就是在generatorConfig.xml檔案對應的地方,將class檔案指向我們自己定義的類,就是這麼簡單。而且很多場景都有人重寫過對應的類,所以我們要什麼,就去搜對應文件,然後改一下就好。
1.首先包mybatis-generator-core原始碼下下來
官方原始碼:https://github.com/mybatis/generator
這裡我們要改生成Bo類時,類上面新增時間,作者名字,類屬性新增資料庫中對應的註釋
1.找到DefaultCommentGenerator類
2.在同包下建立自己的註釋類MyCommentGenerator 繼承DefaultCommentGenerator
package org.mybatis.generator.internal;
import org.apache.commons.lang3.StringUtils;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.TopLevelClass;
import org.mybatis.generator.api.dom.xml.XmlElement;
/**
* User: lanxinghua
* Date: 2018/10/20 18:34
* Desc:
*/
public class MyCommentGenerator extends DefaultCommentGenerator {
//類上新增註釋
@Override
public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
topLevelClass.addJavaDocLine("/**");
String remark = introspectedTable.getRemarks();
if (StringUtils.isNotBlank(remark)) {
topLevelClass.addJavaDocLine(" * " + remark);
}
topLevelClass.addJavaDocLine(" * ");
topLevelClass.addJavaDocLine(" * " + "@author " + getAuthor());
topLevelClass.addJavaDocLine(" * " + "@date " + getDateContent());
topLevelClass.addJavaDocLine(" */");
}
//屬性上新增註釋
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
String remark = introspectedColumn.getRemarks();
if (StringUtils.isNotBlank(remark)) {
field.addJavaDocLine("/**");
field.addJavaDocLine(" * " + remark);
field.addJavaDocLine(" */");
}
}
//get方法新增註釋
@Override
public void addGetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
}
//setter方法新增註釋
@Override
public void addSetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
}
@Override
public void addComment(XmlElement xmlElement) {
}
}
3.修改DefaultCommentGenerator程式碼
新增幾個屬性
private String author;
private String date;
private String dateContent;
private static final String DEFAULT_DATE_FORMAT = "yyyy/MM/dd";
public void addConfigurationProperties(Properties properties) {
this.properties.putAll(properties);
suppressDate = isTrue(properties
.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE));
suppressAllComments = isTrue(properties
.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_ALL_COMMENTS));
addRemarkComments = isTrue(properties
.getProperty(PropertyRegistry.COMMENT_GENERATOR_ADD_REMARK_COMMENTS));
author = properties.getProperty("author");
author = author == null ? "" : author;
date = properties.getProperty("date");
date = date == null ? DEFAULT_DATE_FORMAT : date;
SimpleDateFormat sf = new SimpleDateFormat(date);
dateContent = sf.format(new Date());
}
public String getAuthor() {
return author;
}
public String getDateContent() {
return dateContent;
}
4.打成jar包,install到倉庫去
5.修改generatorConfig.xml檔案
<!-- 需要修改原始碼 -->
<commentGenerator type="org.mybatis.generator.internal.MyCommentGenerator">
<!-- 檔案編碼 -->
<property name="javaFileEncoding" value="UTF-8" />
<!-- 忽略所有註解,使用自定義的註解生成 -->
<property name="suppressAllComments" value="true" />
<!-- 作者 -->
<property name="author" value="lanxinghua" />
<!-- 時間 value值為時間格式-->
<property name="date" value="yyyy/MM/dd" />
</commentGenerator>
總結
其實想想,這也是非常簡單的。不過我們應該要有點啟發,如果經常有同樣的事要幹,我們就要想辦法讓這部分通用起來,不用把時間浪費在一些沒意義的事情上。
相關文章
- mybatis-generator-程式碼自動生成器MyBatis
- 把Mybatis Generator生成的程式碼加上想要的註釋MyBatis
- 修改自動生成get/set方法模板程式碼
- 《程式碼大全》程式碼生成
- golang 遞迴自己,輸出自己的原始碼Golang遞迴原始碼
- 修改myBatis Generator原始碼MyBatis原始碼
- 修改 requests 庫原始碼的方法原始碼
- Maven生成原始碼包Maven原始碼
- Graphx 原始碼剖析-圖的生成原始碼
- 生成驗證碼程式程式碼
- dll反編譯(修改引用檔案、修改程式碼)再生成dll編譯
- ThinkPHP 5.1 修改 Cache 原始碼PHP原始碼
- (程式碼生成)JS寫的程式碼生成器-編碼也可以這麼爽..JS
- 成品直播原始碼推薦,用JNI生成so檔案,加密解密需要的hascode生成程式碼原始碼加密解密
- 直播小程式原始碼,小程式生成二維碼 (相容H5、微信小程式)原始碼H5微信小程式
- 各種原始碼實現,你想要的這裡都有原始碼
- ABAP和Hybris的原始碼生成工具原始碼
- 網站原始碼密碼修改?怎樣修改網站模板的內容?網站原始碼密碼
- 從程式碼生成說起,帶你深入理解 mybatis generator 原始碼MyBatis原始碼
- Derek解讀Bytom原始碼-protobuf生成比原核心程式碼原始碼
- 精簡自己 20% 的程式碼
- java之使用Servlet生成驗證碼的原始碼分享JavaServlet原始碼
- 一個根據程式碼自動生成UML的外掛,助你看原始碼事半功倍原始碼
- nvme driver 原始碼修改、編譯原始碼編譯
- CodeMixer完美替代ChaosTool ,iOS新增垃圾程式碼工具,程式碼混淆工具,程式碼生成器,史上最好用的垃圾程式碼新增工具,自己開發的小工具...iOS
- ReplitLM: 開原始碼生成模型的新突破原始碼模型
- 連線資料庫的ASP樹圖生成程式(原始碼) (轉)資料庫原始碼
- UI2Code智慧生成Flutter程式碼——機器生成程式碼UIFlutter
- 程式碼修改分級
- Java原始碼詳解系列(十)--全面分析mybatis的使用、原始碼和程式碼生成器(總計5篇部落格)Java原始碼MyBatis
- .NET初探原始碼生成(Source Generators)原始碼
- plsql自動生成java原始碼SQLJava原始碼
- yaf程式碼生成工具的使用
- 簡單的程式碼生成工具
- GridView生成的HTML程式碼ViewHTML
- 用生成模型為自己生成密碼,無懼暴力破解模型密碼
- GO程式碼生成程式碼小思小試Go
- golang程式碼生成工具Golang