前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyBatis的逆向工程

MyBatis的逆向工程

作者头像
用针戳左手中指指头
发布2021-01-29 11:01:29
5830
发布2021-01-29 11:01:29
举报
文章被收录于专栏:学习计划

用MyBatis的逆向工程对应注释很是烦恼,再者公司要求代码要增加协议,又前后端分离需要swagger的支持,而且看源码,不会增加类注释和注解,方法是空的,自定义无效,所以就改动了下代码生成器的源码,效果如下,这个是直接改的源码,为了方便大家,我把其他东西删掉了,默认生成没有协议注释和注解。

但是我提供了一个自定义类,大家有需要可以自己编辑。

这个包我是在Oracle上测试的,没有试过sqlserver、mysql那些,有问题可以提出来,谢谢。

资源:之前上传的csdn资源竟然要积分,这次换了个百度网盘的。

链接:https://pan.baidu.com/s/1RQDhjiF_L6uT3cE0fFtCcQ 提取码:j53u

工程名自动获取,用户名自动获取,在数据库中要有注释才能生成注释。

自定义类:

代码语言:javascript
复制
package com.sunnada.gaia.task.construction;

import java.util.Set;

import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.*;
import org.mybatis.generator.internal.DefaultCommentGenerator;
import org.mybatis.generator.internal.util.StringUtility;

/**
 *  注释
 *
 * @author LI
 */
public class CustomGenerator extends DefaultCommentGenerator {

    /**
     * 增加类注释
     * @param topLevelClass
     * @param introspectedTable
     * @return
     */
    public void addAllClassComment(JavaElement topLevelClass, IntrospectedTable introspectedTable) {
        topLevelClass.addJavaDocLine("/**");
        String remarks = introspectedTable.getRemarks();
        //判断有注释才增加注释
        if ( StringUtility.stringHasValue(remarks)) {
            String[] remarkLines = remarks.split(System.getProperty("line.separator"));
            for (String remarkLine : remarkLines) {
                topLevelClass.addJavaDocLine(" *   " + remarkLine);
            }
        }
        topLevelClass.addJavaDocLine(" *");
        //这里获取的是计算机名
        topLevelClass.addJavaDocLine(" * @author "+System.getenv().get("COMPUTERNAME"));
        topLevelClass.addJavaDocLine(" */");
    }

    /**
     * 属性注释
     * @param field
     * @param introspectedTable
     * @param introspectedColumn
     */
    @Override
    public void addFieldComment(Field field,
                                IntrospectedTable introspectedTable,
                                IntrospectedColumn introspectedColumn) {
        String remarks = introspectedColumn.getRemarks();
        if(isEmpty(remarks))
            return;
        field.addJavaDocLine("/**"); //$NON-NLS-1$
        if (StringUtility.stringHasValue(remarks)) {
            field.addJavaDocLine(" *   " + remarks);  //$NON-NLS-1$
        }
        field.addJavaDocLine(" */"); //$NON-NLS-1$
    }

    /**
     * 这个是通用方法注释(就是mapper)
     * 暂不用注释
     * @param method 方法对象
     * @param introspectedTable 表信息
     */
    @Override
    public void addGeneralMethodComment(Method method,
                                        IntrospectedTable introspectedTable) {
//通用方法不注释
//        StringBuilder sb = new StringBuilder();
//        //获取列名
//        List<IntrospectedColumn> list = introspectedTable.getBaseColumns();
//        for (IntrospectedColumn column : list) {
//            //如果是delete,根据id删除
//            //如果是update,根据id更新
//            //如果是insert,新增表名
//            //如果是select,根据id查询
//        }
//        method.addJavaDocLine("/**"); //$NON-NLS-1$
        sb.append(introspectedTable.getFullyQualifiedTable());
//        method.addJavaDocLine(" * 待写");
//
//        method.addJavaDocLine(" */"); //$NON-NLS-1$
    }

    /**
     * get方法注释
     * @param method 方法对象
     * @param introspectedTable 表信息
     * @param introspectedColumn 列信息
     */
    @Override
    public void addGetterComment(Method method,
                                 IntrospectedTable introspectedTable,
                                 IntrospectedColumn introspectedColumn) {
        StringBuilder sb = new StringBuilder();
        String remarks = introspectedColumn.getRemarks();
        if(isEmpty(remarks))
            return;
        method.addJavaDocLine("/**"); //$NON-NLS-1$
        if (StringUtility.stringHasValue(remarks)) {
            String[] remarkLines = remarks.split(System.getProperty("line.separator"));  //$NON-NLS-1$
            for (String remarkLine : remarkLines) {
                method.addJavaDocLine(" *   获取 " + remarkLine);  //$NON-NLS-1$
            }
        }
        method.addJavaDocLine(" *"); //$NON-NLS-1$
        sb.setLength(0);
        sb.append(" * @return "); //$NON-NLS-1$
        sb.append(getSimpleRemark(introspectedColumn.getRemarks()));
        method.addJavaDocLine(sb.toString());

        method.addJavaDocLine(" */"); //$NON-NLS-1$
    }

    /**
     * set方法注释
     * @param method 方法对象
     * @param introspectedTable 表信息
     * @param introspectedColumn 列信息
     */
    @Override
    public void addSetterComment(Method method,
                                 IntrospectedTable introspectedTable,
                                 IntrospectedColumn introspectedColumn) {
        StringBuilder sb = new StringBuilder();
        String remarks = introspectedColumn.getRemarks();
        if(isEmpty(remarks))
            return;
        method.addJavaDocLine("/**"); //$NON-NLS-1$
        if (StringUtility.stringHasValue(remarks)) {
            method.addJavaDocLine(" *   设置 " + remarks);  //$NON-NLS-1$
        }
        method.addJavaDocLine(" *"); //$NON-NLS-1$

        Parameter parm = method.getParameters().get(0);
        sb.setLength(0);
        sb.append(" * @param "); //$NON-NLS-1$
        sb.append(parm.getName());
        sb.append(" ");
        sb.append(getSimpleRemark(remarks));
        method.addJavaDocLine(sb.toString());
        method.addJavaDocLine(" */"); //$NON-NLS-1$
    }

    /**
     * 属性的注解
     *
     * @param field 属性
     * @param introspectedTable 表信息
     * @param introspectedColumn 列信息
     * @param imports 导包信息
     */
    @Override
    public void addFieldAnnotation(Field field, IntrospectedTable introspectedTable,
                                   IntrospectedColumn introspectedColumn, Set<FullyQualifiedJavaType> imports) {
        String remark = introspectedColumn.getRemarks();
        //如果是前后端分离的话,都是swagger,那么实体类生成必须要增加,就不存在判断了
//        if(!isEmpty(remark))
        {
            imports.add(new FullyQualifiedJavaType("io.swagger.annotations.ApiModelProperty")); //$NON-NL
            field.addAnnotation("@ApiModelProperty(value=\""+getSimpleRemark(remark)+"\")");
        }
    }

    /**
     * 实体类注解
     * @param innerClass
     * @param introspectedTable
     * @param imports
     */
    @Override
    public void addClassAnnotation(InnerClass innerClass, IntrospectedTable introspectedTable,
                                   Set<FullyQualifiedJavaType> imports) {
        String remarks = introspectedTable.getRemarks();
//        if(!isEmpty(remarks))
        {
            imports.add(new FullyQualifiedJavaType("io.swagger.annotations.ApiModel")); //$NON-NLS-1$/$NON-NLS-1$
            innerClass.addAnnotation("@ApiModel(\""+remarks+"\")");
        }
    }

    /**
     * 类文件的头注释(企业协议)
     *
     * @return
     */
    @Override
    public String getClassFileComment() {
        StringBuilder sb = new StringBuilder();
//        sb.append("/**");
//        sb.append(System.getProperty("line.separator"));
//        sb.append(" * ");
//        sb.append("Created on [");
//        sb.append(dateToString(new Date(),"yyyy/MM/dd HH:mm"));
//        sb.append("] by ");
//        sb.append(System.getenv().get("COMPUTERNAME"));
//        sb.append(System.getProperty("line.separator"));
//        sb.append(" * ");
//        sb.append(System.getProperty("line.separator"));
//        sb.append(" * 项目名称: ");
//        sb.append(getProjectName());
//        sb.append(System.getProperty("line.separator"));
//        sb.append(" * ");
//        sb.append(System.getProperty("line.separator"));
        //协议内容
//        sb.append(" */ ");
//        sb.append(System.getProperty("line.separator"));
        return sb.toString();
    }
}

还有xml的配置文件里有这样一段话,一个是自定义类的配置,一个是默认的。

代码语言:javascript
复制
  <!--<commentGenerator type="com.sunnada.gaia.task.construction.CustomGenerator">-->
        <commentGenerator >
            <property name="suppressDate" value="true"/>
            <property name="addRemarkComments" value="true"/>
            <property name="suppressAllComments" value="false"/>
        </commentGenerator>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/02/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档