mybatis-generator-修改原始碼生成自己想要的程式碼
阿新 • • 發佈:2019-01-25
前言
雖然mybatis-generator能生成dao,mapper,xml等檔案,但是生成的程式碼也不是完全通用,所以這裡我們要的mybatis-generator-core原始碼進行修改。
場景
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原始碼下下來
這裡我們要改生成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>
總結
其實想想,這也是非常簡單的。不過我們應該要有點啟發,如果經常有同樣的事要幹,我們就要想辦法讓這部分通用起來,不用把時間浪費在一些沒意義的事情上。