All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.kg.component.generator.config.po.TableInfo Maven / Gradle / Ivy

There is a newer version: 1.1.26
Show newest version
/*
 * Copyright (c) 2011-2021, baomidou ([email protected]).
 * 

* Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at *

* https://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.kg.component.generator.config.po; import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.activerecord.Model; import com.kg.component.generator.config.GlobalConfig; import com.kg.component.generator.config.StrategyConfig; import com.kg.component.generator.config.builder.ConfigBuilder; import com.kg.component.generator.config.builder.Entity; import com.kg.component.generator.config.rules.IColumnType; import org.jetbrains.annotations.NotNull; import java.io.Serializable; import java.util.*; import java.util.stream.Collectors; /** * 表信息,关联到当前字段信息 * * @author YangHu, lanjerry * @since 2016/8/30 */ public class TableInfo { /** * 策略配置 */ private final StrategyConfig strategyConfig; /** * 全局配置信息 */ private final GlobalConfig globalConfig; /** * 包导入信息 */ private final Set importPackages = new TreeSet<>(); /** * 是否转换 */ private boolean convert; /** * 表名称 */ private String name; /** * 表注释 */ private String comment; /** * 实体名称 */ private String entityName; /** * DTO名称 */ private String dtoName; private String dtoconvertName; /** * mapper名称 */ private String mapperName; /** * xml名称 */ private String xmlName; /** * service名称 */ private String serviceName; /** * serviceImpl名称 */ private String serviceImplName; /** * controller名称 */ private String controllerName; /** * 表字段 */ private final List fields = new ArrayList<>(); /** * 是否有主键 */ private boolean havePrimaryKey; /** * 公共字段 */ private final List commonFields = new ArrayList<>(); /** * 字段名称集 */ private String fieldNames; /** * 实体 */ private final Entity entity; /** * 构造方法 * * @param configBuilder 配置构建 * @param name 表名 * @since 3.5.0 */ public TableInfo(@NotNull ConfigBuilder configBuilder, @NotNull String name) { this.strategyConfig = configBuilder.getStrategyConfig(); this.globalConfig = configBuilder.getGlobalConfig(); this.entity = configBuilder.getStrategyConfig().entity(); this.name = name; } /** * @since 3.5.0 */ protected TableInfo setConvert() { if (strategyConfig.startsWithTablePrefix(name) || entity.isTableFieldAnnotationEnable()) { this.convert = true; } else { this.convert = !entityName.equalsIgnoreCase(name); } return this; } public String getEntityPath() { return entityName.substring(0, 1).toLowerCase() + entityName.substring(1); } /** * @param entityName 实体名称 * @return this */ public TableInfo setEntityName(@NotNull String entityName) { this.entityName = entityName; // 先放置在这里 setConvert(); return this; } /** * 添加字段 * * @param field 字段 * @since 3.5.0 */ public void addField(@NotNull TableField field) { if (entity.matchIgnoreColumns(field.getColumnName())) { // 忽略字段不在处理 return; } else if (entity.matchSuperEntityColumns(field.getColumnName())) { this.commonFields.add(field); } else { this.fields.add(field); } } /** * @param pkgs 包空间 * @return this * @since 3.5.0 */ public TableInfo addImportPackages(@NotNull String... pkgs) { return addImportPackages(Arrays.asList(pkgs)); } public TableInfo addImportPackages(@NotNull List pkgList) { importPackages.addAll(pkgList); return this; } /** * 转换filed实体为 xml mapper 中的 base column 字符串信息 */ public String getFieldNames() { if (StringUtils.isBlank(fieldNames)) { this.fieldNames = this.fields.stream().map(TableField::getColumnName).collect(Collectors.joining(", ")); } return this.fieldNames; } /** * 导包处理 * * @since 3.5.0 */ public void importPackage() { String superEntity = entity.getSuperClass(); if (StringUtils.isNotBlank(superEntity)) { // 自定义父类 this.importPackages.add(superEntity); } else { if (entity.isActiveRecord()) { // 无父类开启 AR 模式 this.importPackages.add(Model.class.getCanonicalName()); } } if (entity.isSerialVersionUID() || entity.isActiveRecord()) { this.importPackages.add(Serializable.class.getCanonicalName()); } if (this.isConvert()) { this.importPackages.add(TableName.class.getCanonicalName()); } IdType idType = entity.getIdType(); if (null != idType && this.isHavePrimaryKey()) { // 指定需要 IdType 场景 this.importPackages.add(IdType.class.getCanonicalName()); this.importPackages.add(TableId.class.getCanonicalName()); } this.fields.forEach(field -> { IColumnType columnType = field.getColumnType(); if (null != columnType && null != columnType.getPkg()) { importPackages.add(columnType.getPkg()); } if (field.isKeyFlag()) { // 主键 if (field.isConvert() || field.isKeyIdentityFlag()) { importPackages.add(TableId.class.getCanonicalName()); } // 自增 if (field.isKeyIdentityFlag()) { importPackages.add(IdType.class.getCanonicalName()); } } else if (field.isConvert()) { // 普通字段 importPackages.add(com.baomidou.mybatisplus.annotation.TableField.class.getCanonicalName()); } if (null != field.getFill()) { // 填充字段 importPackages.add(com.baomidou.mybatisplus.annotation.TableField.class.getCanonicalName()); // 好像default的不用处理也行,这个做优化项目. importPackages.add(FieldFill.class.getCanonicalName()); } if (field.isVersionField()) { this.importPackages.add(Version.class.getCanonicalName()); } if (field.isLogicDeleteField()) { this.importPackages.add(TableLogic.class.getCanonicalName()); } }); } /** * 处理表信息(文件名与导包) * * @since 3.5.0 */ public void processTable() { String entityName = entity.getNameConvert().entityNameConvert(this); this.setEntityName(entity.getConverterFileName().convert(entityName)); this.dtoName = strategyConfig.dto().getConverterFileName().convert(entityName); this.dtoconvertName = strategyConfig.dto().getConverterDtoconvertFileName().convert(entityName); this.mapperName = strategyConfig.mapper().getConverterMapperFileName().convert(entityName); this.xmlName = strategyConfig.mapper().getConverterXmlFileName().convert(entityName); this.serviceName = strategyConfig.service().getConverterServiceFileName().convert(entityName); this.serviceImplName = strategyConfig.service().getConverterServiceImplFileName().convert(entityName); this.controllerName = strategyConfig.controller().getConverterFileName().convert(entityName); this.importPackage(); } public TableInfo setComment(String comment) { // 暂时挪动到这 this.comment = this.globalConfig.isSwagger() && StringUtils.isNotBlank(comment) ? comment.replace("\"", "\\\"") : comment; return this; } public TableInfo setHavePrimaryKey(boolean havePrimaryKey) { this.havePrimaryKey = havePrimaryKey; return this; } @NotNull public Set getImportPackages() { return importPackages; } public boolean isConvert() { return convert; } public TableInfo setConvert(boolean convert) { this.convert = convert; return this; } public String getName() { return name; } public String getComment() { return comment; } public String getEntityName() { return entityName; } public String getDTOName() { return dtoName; } public String getDtoconvertName() { return dtoconvertName; } public String getMapperName() { return mapperName; } public String getXmlName() { return xmlName; } public String getServiceName() { return serviceName; } public String getServiceImplName() { return serviceImplName; } public String getControllerName() { return controllerName; } @NotNull public List getFields() { return fields; } public boolean isHavePrimaryKey() { return havePrimaryKey; } @NotNull public List getCommonFields() { return commonFields; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy