继承BaseModelGenerator 生成Model时添加数据库表字段

package com.hanhanfilm.utils.nigel;


import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.generator.BaseModelGenerator;
import com.jfinal.plugin.activerecord.generator.ColumnMeta;
import com.jfinal.plugin.activerecord.generator.TableMeta;


/**
 * https://www.hanhanfilm.com
 * Created by badouyuren on 2016/4/12.
 */
public class NigelBaseGenerator extends BaseModelGenerator {

    protected String classDefineTemplate =
            "/**%n" +
                    " * Generated by badouyurenon %s.%n" +
                    " */%n" +
                    "@SuppressWarnings(\"serial\")%n" +
                    "public abstract class %s<M extends %s<M>> extends Model<M> implements IBean {%n%n";

    protected String privateVariableTemplate =
            "\tpublic String %s = \"%s\"; %n";

    protected String setterTemplate =
            "\tpublic void %s(%s %s) {%n" +
                    "\t\tset(this.%s, %s);%n" +
                    "\t}%n%n";
    protected String getterTemplate =
            "\tpublic %s %s() {%n" +
                    "\t\treturn get(%s);%n" +
                    "\t}%n%n";


    public NigelBaseGenerator(String baseModelPackageName, String baseModelOutputDir) {
        super(baseModelPackageName, baseModelOutputDir);
    }

    @Override
    protected void genBaseModelContent(TableMeta tableMeta) {
        StringBuilder ret = new StringBuilder();
        genPackage(ret);
        genImport(ret);
        genClassDefine(tableMeta, ret);

        for (ColumnMeta columnMeta : tableMeta.columnMetas) {
            genPrivateVariable(columnMeta, ret);
        }

        ret.append(String.format("%n"));

        for (ColumnMeta columnMeta : tableMeta.columnMetas) {
            genSetMethodName(columnMeta, ret);
            genGetMethodName(columnMeta, ret);
        }
        ret.append(String.format("}%n"));
        tableMeta.baseModelContent = ret.toString();
    }


    @Override
    protected void genClassDefine(TableMeta tableMeta, StringBuilder ret) {
        ret.append(String.format(classDefineTemplate, NigelDate.getFullDatetimeStr(), tableMeta.baseModelName, tableMeta.baseModelName));
    }


    /**
     * private String aaBb = "aa_bb";
     *
     * @param columnMeta
     * @param ret
     */
    protected void genPrivateVariable(ColumnMeta columnMeta, StringBuilder ret) {
        String privateVariableName = StrKit.firstCharToLowerCase(columnMeta.attrName);
        // 如果 privateVariableName 参数名为 java 语言关键字,则添加下划线前缀 "_"
        privateVariableName = javaKeyword.contains(privateVariableName) ? "_" + privateVariableName : privateVariableName;

        String privateVariable = String.format(privateVariableTemplate, privateVariableName, columnMeta.name);
        ret.append(privateVariable);
    }


    @Override
    protected void genSetMethodName(ColumnMeta columnMeta, StringBuilder ret) {
        String setterMethodName = "set" + StrKit.firstCharToUpperCase(columnMeta.attrName);
        // 如果 setter 参数名为 java 语言关键字,则添加下划线前缀 "_"
        String argName = javaKeyword.contains(columnMeta.attrName) ? "_" + columnMeta.attrName : columnMeta.attrName;
        String setter = String.format(setterTemplate, setterMethodName, columnMeta.javaType, argName, argName, argName);
        ret.append(setter);
    }


    @Override
    protected void genGetMethodName(ColumnMeta columnMeta, StringBuilder ret) {

        String privateVariableName = StrKit.firstCharToLowerCase(columnMeta.attrName);
        // 如果 privateVariableName 参数名为 java 语言关键字,则添加下划线前缀 "_"
        privateVariableName = javaKeyword.contains(privateVariableName) ? "_" + privateVariableName : privateVariableName;

        String getterMethodName = "get" + StrKit.firstCharToUpperCase(columnMeta.attrName);
        String getter = String.format(getterTemplate, columnMeta.javaType, getterMethodName, privateVariableName);
        ret.append(getter);
    }


}


评论区

badouyuren

2016-07-12 18:34

生成代码示例 http://www.jfinal.com/share/24