/**
* Copyright (c) 2011-2020, hubin (jobob@qq.com).
* <p>
* 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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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.baomidou.mybatisplus.generator.config.po;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.toolkit.StringUtils;
/**
* <p>
* 表信息,关联到当前字段信息
* </p>
*
* @author YangHu
* @since 2016/8/30
*/
public class TableInfo {
private boolean convert;
private String name;
private String comment;
private String entityName;
private String mapperName;
private String xmlName;
private String serviceName;
private String serviceImplName;
private String controllerName;
private List<TableField> fields;
private List<TableField> commonFields;// 公共字段
private List<String> importPackages = new ArrayList<>();
private String fieldNames;
public boolean isConvert() {
return convert;
}
protected void setConvert(StrategyConfig strategyConfig) {
if (strategyConfig.containsTablePrefix(name)) {
// 包含前缀
this.convert = true;
} else if (strategyConfig.isCapitalModeNaming(name)) {
// 包含
this.convert = false;
} else {
// 转换字段
if (StrategyConfig.DB_COLUMN_UNDERLINE) {
// 包含大写处理
if (StringUtils.containsUpperCase(name)) {
this.convert = true;
}
} else if (!entityName.equalsIgnoreCase(name)) {
this.convert = true;
}
}
}
public void setConvert(boolean convert) {
this.convert = convert;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public String getEntityPath() {
StringBuilder ep = new StringBuilder();
ep.append(entityName.substring(0, 1).toLowerCase());
ep.append(entityName.substring(1));
return ep.toString();
}
public String getEntityName() {
return entityName;
}
public void setEntityName(StrategyConfig strategyConfig, String entityName) {
this.entityName = entityName;
this.setConvert(strategyConfig);
}
public String getMapperName() {
return mapperName;
}
public void setMapperName(String mapperName) {
this.mapperName = mapperName;
}
public String getXmlName() {
return xmlName;
}
public void setXmlName(String xmlName) {
this.xmlName = xmlName;
}
public String getServiceName() {
return serviceName;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
public String getServiceImplName() {
return serviceImplName;
}
public void setServiceImplName(String serviceImplName) {
this.serviceImplName = serviceImplName;
}
public String getControllerName() {
return controllerName;
}
public void setControllerName(String controllerName) {
this.controllerName = controllerName;
}
public List<TableField> getFields() {
return fields;
}
public void setFields(List<TableField> fields) {
if (CollectionUtils.isNotEmpty(fields)) {
this.fields = fields;
// 收集导入包信息
Set<String> pkgSet = new HashSet<>();
for (TableField field : fields) {
if (null != field.getColumnType() && null != field.getColumnType().getPkg()) {
pkgSet.add(field.getColumnType().getPkg());
}
if (field.isKeyFlag()) {
// 主键
if (field.isConvert() || field.isKeyIdentityFlag()) {
pkgSet.add("com.baomidou.mybatisplus.annotations.TableId");
}
// 自增
if (field.isKeyIdentityFlag()) {
pkgSet.add("com.baomidou.mybatisplus.enums.IdType");
}
} else if (field.isConvert()) {
// 普通字段
pkgSet.add("com.baomidou.mybatisplus.annotations.TableField");
}
}
if (!pkgSet.isEmpty()) {
this.importPackages = new ArrayList<>(Arrays.asList(pkgSet.toArray(new String[]{})));
}
}
}
public List<TableField> getCommonFields() {
return commonFields;
}
public void setCommonFields(List<TableField> commonFields) {
this.commonFields = commonFields;
}
public List<String> getImportPackages() {
return importPackages;
}
public void setImportPackages(String pkg) {
importPackages.add(pkg);
}
/**
* 转换filed实体为xmlmapper中的basecolumn字符串信息
*
* @return
*/
public String getFieldNames() {
if (StringUtils.isEmpty(fieldNames)) {
StringBuilder names = new StringBuilder();
for (int i = 0; i < fields.size(); i++) {
TableField fd = fields.get(i);
if (i == fields.size() - 1) {
names.append(cov2col(fd));
} else {
names.append(cov2col(fd)).append(", ");
}
}
fieldNames = names.toString();
}
return fieldNames;
}
/**
* mapper xml中的字字段添加as
*
* @param field 字段实体
* @return 转换后的信息
*/
private String cov2col(TableField field) {
if (null != field) {
return field.isConvert() ? field.getName() + " AS " + field.getPropertyName() : field.getName();
}
return StringUtils.EMPTY;
}
}