package org.yeshi.utils.generater.entity; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Transient; import org.yeshi.utils.generater.annotation.admin.DaoQueryCondition; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class MongoDBDaoData extends BaseData { private String daoName; private String baseDaoClassName; private String entityClassName; private Set importClasses; private ColumnData identityColumn; private List columnDataList; private List daoQueryColumnDataList; 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; String identityColumnType = null; List columlist = new ArrayList<>(); List daoQueryColumnList = new ArrayList<>(); for (Field fd : fields) { //private/public 非final,static属性才会参与解析 if (fd.getModifiers() != 1 && fd.getModifiers() != 2) { continue; } String columName = fd.getName(); String columnDataType = fd.getGenericType().getTypeName(); Annotation[] as = fd.getAnnotations(); if (columName != null) { for (Annotation a : as) { //主键 if (a instanceof Id) { identityColumnName = new String(columName); identityColumnType = columnDataType; columName = null; break; } } } for (Annotation a : as) { //不参与解析 if (a instanceof Transient || a instanceof java.beans.Transient) { columName = null; break; } } //获取查询条件 for (Annotation a : as) { if (a instanceof DaoQueryCondition) { daoQueryColumnList.add(new DaoQueryColumnData(columName, columnDataType, ((DaoQueryCondition) a).queryType())); break; } } if (columName != null) { columlist.add(new ColumnData(columName, columnDataType)); } } List columnDataList = new ArrayList<>(); for (ColumnData column : columlist) { //更新时间不参与更新 if (!"updateTime".equalsIgnoreCase(column.getColumnName())) { columnDataList.add(column); } } Set importClasses = new HashSet<>(); for (ColumnData columnData : columnDataList) { if (columnData.getType().indexOf(".") > -1) { importClasses.add(columnData.getType()); columnData.setType(columnData.getType().split("\\.")[columnData.getType().split("\\.").length - 1]); } } importClasses.add("java.util.List"); importClasses.add("java.util.ArrayList"); MongoDBDaoData data = new MongoDBDaoData(); data.setBaseDaoClassName(baseDaoClass.getSimpleName()); data.setColumnDataList(columnDataList); data.setDaoQueryColumnDataList(daoQueryColumnList); data.setDaoName(daoName); data.setEntityClass(entityClass.getName()); data.setEntityClassName(entityClass.getSimpleName()); data.setIdentityColumn(new ColumnData(identityColumnName, identityColumnType)); data.setPackageName(daoPackageName); importClasses.add(baseDaoClass.getName()); importClasses.add(entityClass.getName()); data.setImportClasses(importClasses); return data; } } 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; } public Set getImportClasses() { return importClasses; } public void setImportClasses(Set importClasses) { this.importClasses = importClasses; } public List getDaoQueryColumnDataList() { return daoQueryColumnDataList; } public void setDaoQueryColumnDataList(List daoQueryColumnDataList) { this.daoQueryColumnDataList = daoQueryColumnDataList; } }