001package cn.mybatis.mp.generator.database.meta;
002
003import cn.mybatis.mp.core.util.NamingUtil;
004import cn.mybatis.mp.generator.config.GeneratorConfig;
005import cn.mybatis.mp.generator.util.GeneratorUtil;
006import lombok.Getter;
007import lombok.ToString;
008
009@Getter
010@ToString
011public class EntityFieldInfo {
012
013    @ToString.Exclude
014    private final EntityInfo entityInfo;
015
016    private final ColumnInfo columnInfo;
017
018    private final String name;
019
020    private final Class<?> type;
021
022    private final String typeName;
023
024    private final String remarks;
025
026    private final boolean select;
027
028    private final boolean update;
029
030    private final String defaultTableIdCode;
031
032    public EntityFieldInfo(GeneratorConfig generatorConfig, EntityInfo entityInfo, ColumnInfo columnInfo) {
033        this.entityInfo = entityInfo;
034        this.columnInfo = columnInfo;
035        this.update = !generatorConfig.getColumnConfig().getDisableUpdateColumns().contains(columnInfo.getName());
036        this.name = GeneratorUtil.getEntityFieldName(generatorConfig, columnInfo);
037        this.remarks = GeneratorUtil.getEntityFieldRemarks(generatorConfig, columnInfo);
038        this.type = GeneratorUtil.getColumnType(generatorConfig, columnInfo);
039        if (this.type == byte[].class) {
040            this.select = false;
041        } else {
042            this.select = !generatorConfig.getColumnConfig().getDisableSelectColumns().contains(columnInfo.getName());
043        }
044        this.typeName = this.type.getSimpleName();
045        this.defaultTableIdCode = generatorConfig.getEntityConfig().getDefaultTableIdCode();
046    }
047
048    public boolean isNeedTableFiled() {
049        return !select || !update;
050    }
051
052    public String buildTableField() {
053        StringBuilder stringBuilder = new StringBuilder("@TableField(");
054        if (!select) {
055            stringBuilder.append("select = false,");
056        }
057        if (!update) {
058            stringBuilder.append("update = false,");
059        }
060        stringBuilder = stringBuilder.deleteCharAt(stringBuilder.length() - 1);
061
062        stringBuilder.append(")");
063        return stringBuilder.toString();
064    }
065
066    public String getterMethodName() {
067        return (this.type == Boolean.class ? "is" : "get") + NamingUtil.firstToUpperCase(this.name);
068    }
069
070    public String setterMethodName() {
071        return "set" + NamingUtil.firstToUpperCase(this.name);
072    }
073
074    public String buildTableIdCode() {
075        if (!this.columnInfo.isPrimaryKey()) {
076            return null;
077        }
078        StringBuilder stringBuilder = new StringBuilder("@TableId");
079        if (this.columnInfo.isAutoIncrement()) {
080            stringBuilder.append("(IdAutoType.AUTO)");
081        } else {
082            if (this.defaultTableIdCode != null) {
083                return this.defaultTableIdCode;
084            }
085            stringBuilder.append("(IdAutoType.NONE)");
086        }
087        return stringBuilder.toString();
088    }
089}