用MyBatis的逆向工程对应注释很是烦恼,再者公司要求代码要增加协议,又前后端分离需要swagger的支持,而且看源码,不会增加类注释和注解,方法是空的,自定义无效,所以就改动了下代码生成器的源码,效果如下,这个是直接改的源码,为了方便大家,我把其他东西删掉了,默认生成没有协议注释和注解。
但是我提供了一个自定义类,大家有需要可以自己编辑。
这个包我是在Oracle上测试的,没有试过sqlserver、mysql那些,有问题可以提出来,谢谢。
资源:之前上传的csdn资源竟然要积分,这次换了个百度网盘的。
链接:https://pan.baidu.com/s/1RQDhjiF_L6uT3cE0fFtCcQ
提取码:j53u
工程名自动获取,用户名自动获取,在数据库中要有注释才能生成注释。
自定义类:
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的配置文件里有这样一段话,一个是自定义类的配置,一个是默认的。
<!--<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>