package org.yeshi.utils.generater.entity; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Transient; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; public class MongoDBDaoData extends BaseData { private String baseDaoClass; private String daoName; private String baseDaoClassName; private String entityClassName; private ColumnData identityColumn; private List columnDataList; public static class Builder { private Class baseDaoClass; private Class entityClass; private String daoPackageName; private String daoName; public Builder setBaseDaoClass(Class clazz) { this.baseDaoClass = clazz; return this; } public Builder setEntityClass(Class clazz) { this.entityClass = clazz; return this; } public Builder setDaoPackageName(String daoPackageName) { this.daoPackageName = daoPackageName; return this; } public Builder setDaoName(String daoName) { this.daoName = daoName; return this; } public MongoDBDaoData create() { if (daoName == null) { daoName = entityClass.getSimpleName() + "Dao"; } Field[] fields = entityClass.getDeclaredFields(); String identityColumnName = null; List columNamelist = new ArrayList<>(); for (Field fd : fields) { //private/public 非final,static属性才会参与解析 if (fd.getModifiers() != 1 && fd.getModifiers() != 2) { continue; } String columName = fd.getName(); Annotation[] as = fd.getAnnotations(); if (columName != null) { for (Annotation a : as) { //主键 if (a instanceof Id) { identityColumnName = new String(columName); columName = null; break; } } } for (Annotation a : as) { //不参与解析 if (a instanceof Transient || a instanceof java.beans.Transient) { columName = null; break; } } if (columName != null) { columNamelist.add(columName); } } List columnDataList = new ArrayList<>(); for (String columnName : columNamelist) { //更新时间不参与更新 if (!"updateTime".equalsIgnoreCase(columnName)) { columnDataList.add(new ColumnData(columnName)); } } MongoDBDaoData data = new MongoDBDaoData(); data.setBaseDaoClass(baseDaoClass.getName()); data.setBaseDaoClassName(baseDaoClass.getSimpleName()); data.setColumnDataList(columnDataList); data.setDaoName(daoName); data.setEntityClass(entityClass.getName()); data.setEntityClassName(entityClass.getSimpleName()); data.setIdentityColumn(new ColumnData(identityColumnName)); data.setPackageName(daoPackageName); return data; } } public String getBaseDaoClass() { return baseDaoClass; } public void setBaseDaoClass(String baseDaoClass) { this.baseDaoClass = baseDaoClass; } public String getDaoName() { return daoName; } public void setDaoName(String daoName) { this.daoName = daoName; } public String getBaseDaoClassName() { return baseDaoClassName; } public void setBaseDaoClassName(String baseDaoClassName) { this.baseDaoClassName = baseDaoClassName; } public String getEntityClassName() { return entityClassName; } public void setEntityClassName(String entityClassName) { this.entityClassName = entityClassName; } public ColumnData getIdentityColumn() { return identityColumn; } public void setIdentityColumn(ColumnData identityColumn) { this.identityColumn = identityColumn; } public List getColumnDataList() { return columnDataList; } public void setColumnDataList(List columnDataList) { this.columnDataList = columnDataList; } }