mybatis-generator-修改源码生成自己想要的代码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37499059/article/details/83216698

前言

虽然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>

在这里插入图片描述


总结

其实想想,这也是非常简单的。不过我们应该要有点启发,如果经常有同样的事要干,我们就要想办法让这部分通用起来,不用把时间浪费在一些没意义的事情上。

猜你喜欢

转载自blog.csdn.net/m0_37499059/article/details/83216698