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<String> importClasses;
|
|
private ColumnData identityColumn;
|
private List<ColumnData> columnDataList;
|
|
private List<DaoQueryColumnData> 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<ColumnData> columlist = new ArrayList<>();
|
List<DaoQueryColumnData> 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<ColumnData> columnDataList = new ArrayList<>();
|
for (ColumnData column : columlist) {
|
//更新时间不参与更新
|
if (!"updateTime".equalsIgnoreCase(column.getColumnName())) {
|
columnDataList.add(column);
|
}
|
}
|
|
Set<String> 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<ColumnData> getColumnDataList() {
|
return columnDataList;
|
}
|
|
public void setColumnDataList(List<ColumnData> columnDataList) {
|
this.columnDataList = columnDataList;
|
}
|
|
public Set<String> getImportClasses() {
|
return importClasses;
|
}
|
|
public void setImportClasses(Set<String> importClasses) {
|
this.importClasses = importClasses;
|
}
|
|
|
public List<DaoQueryColumnData> getDaoQueryColumnDataList() {
|
return daoQueryColumnDataList;
|
}
|
|
public void setDaoQueryColumnDataList(List<DaoQueryColumnData> daoQueryColumnDataList) {
|
this.daoQueryColumnDataList = daoQueryColumnDataList;
|
}
|
}
|