![JAR search and dependency download from the Maven repository](/logo.png)
org.zodiac.mybatisplus.binding.parser.PropInfo Maven / Gradle / Ivy
package org.zodiac.mybatisplus.binding.parser;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.zodiac.commons.util.BeanUtil;
import org.zodiac.commons.util.Colls;
import org.zodiac.mybatisplus.base.BaseEntity;
import org.zodiac.mybatisplus.util.MyBatisPlusSpringBootUtil;
import org.zodiac.sdk.toolkit.util.lang.StrUtil;
/**
* Bean相关信息缓存。
*
*/
public class PropInfo implements Serializable {
private static final long serialVersionUID = -9212408337377175128L;
/**
* 主键列
*/
private String idColumn;
/**
* 主键字段类型
*/
private Class> idFieldType;
/**
* 逻辑删除列
*/
private String deletedColumn;
/**
* 列集合
*/
private final List columns = new ArrayList<>();
/**
* 字段-列的映射
*/
private final Map fieldToColumnMap = new HashMap<>();
/**
* 列-字段的映射
*/
private final Map columnToFieldMap = new HashMap<>();
/**
* 列-字段类型的映射
*/
private final Map columnToFieldTypeMap = new HashMap<>();
/**
* 自动更新字段列表
*/
private final List fillUpdateFieldList = new ArrayList<>();
public PropInfo(Class> beanClass) {
this(beanClass, true);
}
public PropInfo(Class> beanClass, boolean isEntityClass) {
List fields = BeanUtil.extractAllFields(beanClass);
if (Colls.notEmptyColl(fields)) {
for (Field fld : fields) {
String fldName = fld.getName();
String columnName = null;
TableField tableField = fld.getAnnotation(TableField.class);
if (tableField != null) {
if (tableField.exist() == false) {
columnName = null;
} else {
if (StrUtil.isNotBlank(tableField.value())) {
columnName = tableField.value();
} else {
columnName = StrUtil.toSnakeCase(fldName);
}
FieldFill fill = tableField.fill();
if (FieldFill.UPDATE.equals(fill) || FieldFill.INSERT_UPDATE.equals(fill)) {
fillUpdateFieldList.add(fldName);
}
}
}
/*主键。*/
TableId tableId = fld.getAnnotation(TableId.class);
if (tableId != null && this.idColumn == null) {
if (StrUtil.isNotBlank(tableId.value())) {
columnName = tableId.value();
} else if (columnName == null) {
columnName = StrUtil.toSnakeCase(fldName);
}
this.idColumn = columnName;
if (beanClass.isAssignableFrom(BaseEntity.class)) {
this.idFieldType = Long.class;
} else {
this.idFieldType = fld.getType();
}
} else {
TableLogic tableLogic = fld.getAnnotation(TableLogic.class);
if (tableLogic != null) {
if (columnName == null) {
columnName = StrUtil.toSnakeCase(fldName);
}
this.deletedColumn = columnName;
if (StrUtil.isNotBlank(tableLogic.value())) {
MyBatisPlusSpringBootUtil.setActiveFlagValue(tableLogic.value());
}
}
}
/*实体类基于默认规则提取列名。*/
if (columnName == null && isEntityClass) {
columnName = StrUtil.toSnakeCase(fldName);
}
this.fieldToColumnMap.put(fldName, columnName);
if (StrUtil.isNotBlank(columnName)) {
this.columnToFieldMap.put(columnName, fldName);
if (this.idColumn != null && columnName.equals(this.idColumn)
&& beanClass.isAssignableFrom(BaseEntity.class)) {
this.columnToFieldTypeMap.put(columnName, Long.class);
} else {
this.columnToFieldTypeMap.put(columnName, fld.getType());
}
this.columns.add(columnName);
}
}
}
}
public String getIdColumn() {
return idColumn;
}
public Class> getIdFieldType() {
return idFieldType;
}
public String getDeletedColumn() {
return deletedColumn;
}
public List getColumns() {
return columns;
}
public Map getFieldToColumnMap() {
return fieldToColumnMap;
}
public Map getColumnToFieldMap() {
return columnToFieldMap;
}
public Map getColumnToFieldTypeMap() {
return columnToFieldTypeMap;
}
public List getFillUpdateFieldList() {
return fillUpdateFieldList;
}
public String getFieldByColumn(String columnName) {
if (Colls.isEmpty(this.columnToFieldMap)) {
return null;
}
return this.columnToFieldMap.get(columnName);
}
public String getColumnByField(String fieldName) {
if (Colls.isEmpty(this.fieldToColumnMap)) {
return null;
}
return this.fieldToColumnMap.get(fieldName);
}
public String getIdFieldName() {
if (Colls.isEmpty(this.columnToFieldMap)) {
return null;
}
return this.columnToFieldMap.get(idColumn);
}
public Class> getFieldTypeByColumn(String columnName) {
if (Colls.isEmpty(this.columnToFieldTypeMap)) {
return null;
}
return this.columnToFieldTypeMap.get(columnName);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy