Commit 46c74c22 authored by yanzg's avatar yanzg

常规BUG的修改

parent b7c1e8fc
...@@ -110,6 +110,10 @@ public class DaoConst { ...@@ -110,6 +110,10 @@ public class DaoConst {
* 删除字段名称 * 删除字段名称
*/ */
public static final String REMOVE_FLAG = "remove"; public static final String REMOVE_FLAG = "remove";
/**
* MD5标记字段
*/
public static final String MD5_KEY_FLAG = "md5key";
/** /**
* 删除字符串长度变量 * 删除字符串长度变量
*/ */
...@@ -134,13 +138,17 @@ public class DaoConst { ...@@ -134,13 +138,17 @@ public class DaoConst {
/** /**
* 删除标记 * 删除标记
*/ */
public static final int FIELD_REMOVE_FLAG = 1; public static final int FIELD_REMOVE = 1;
/** /**
* 版本号字段 * 版本号字段
*/ */
public static final int FIELD_VERSION_FLAG = 2; public static final int FIELD_VERSION = 2;
/** /**
* 主键字段 * 主键字段
*/ */
public static final int FIELD_PRIMARY = 3; public static final int FIELD_PRIMARY = 3;
/**
* MD5标记字段,用于统计字段
*/
public static final int FIELD_MD5 = 4;
} }
...@@ -6,6 +6,7 @@ import com.yanzuoguang.util.helper.StringHelper; ...@@ -6,6 +6,7 @@ import com.yanzuoguang.util.helper.StringHelper;
import com.yanzuoguang.util.base.MethodField; import com.yanzuoguang.util.base.MethodField;
import com.yanzuoguang.util.base.ObjectHelper; import com.yanzuoguang.util.base.ObjectHelper;
import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -24,50 +25,123 @@ public class TableStruct { ...@@ -24,50 +25,123 @@ public class TableStruct {
private String name; private String name;
/** /**
* 主键名称 * 缓存的字段
*/ */
private TableFieldVo key; private Map<Integer, List<TableFieldVo>> mapFields = new HashMap<>();
/** /**
* MD5KEY * 获取某个类型的所有字段
*
* @param type 某个类型
* @return
*/ */
private TableFieldVo md5Key; private List<TableFieldVo> getFieldActionList(int type) {
if (!mapFields.containsKey(type)) {
mapFields.put(type, new ArrayList<>());
}
return mapFields.get(type);
}
/** /**
* 其他字段 * 获取某个类型的字段
*
* @param type 类型
* @return
*/ */
private List<TableFieldVo> fields = new ArrayList<TableFieldVo>(); private TableFieldVo getFieldAction(int type) {
List<TableFieldVo> list = getFieldActionList(type);
return list.size() > 0 ? list.get(0) : null;
}
/**
* 获取所有普通子弹
*
* @return 所有的普通股字段
*/
public List<TableFieldVo> getFields() { public List<TableFieldVo> getFields() {
return fields; return getFieldActionList(DaoConst.FIELD_COMMON);
} }
/**
* 获取表名
*
* @return
*/
public String getName() { public String getName() {
return name; return name;
} }
/**
* 设置表名
*
* @param name
*/
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }
/**
* 主键
*
* @return
*/
public TableFieldVo getKey() { public TableFieldVo getKey() {
return key; return getFieldAction(DaoConst.FIELD_PRIMARY);
} }
public TableFieldVo getMd5Key() { /**
return md5Key; * 主键名称
*
* @return
*/
public String getKeyName() {
return this.getKey().inputName;
} }
public String getKeyName() { /**
return this.key.inputName; * 主键数据类型
*
* @return
*/
public Class<?> getKeyType() {
return this.getKey().type;
}
/**
* MD5缓存字段
*
* @return
*/
public TableFieldVo getMd5Key() {
return getFieldAction(DaoConst.FIELD_MD5);
} }
/**
* MD5缓存键值
*
* @return
*/
public String getMD5KeyName() { public String getMD5KeyName() {
TableFieldVo md5Key = this.getMd5Key();
return md5Key != null ? md5Key.inputName : null; return md5Key != null ? md5Key.inputName : null;
} }
public Class<?> getKeyType() { /**
return this.key.type; * 判断是否包含版本号字段
*
* @return
*/
public TableFieldVo getVersion() {
return getFieldAction(DaoConst.FIELD_VERSION);
}
/**
* 判断是否包含remove字段
*
* @return
*/
private TableFieldVo getRemove() {
return getFieldAction(DaoConst.FIELD_VERSION);
} }
/** /**
...@@ -75,7 +149,6 @@ public class TableStruct { ...@@ -75,7 +149,6 @@ public class TableStruct {
*/ */
public TableStruct() { public TableStruct() {
this.name = ""; this.name = "";
this.key = new TableFieldVo(DaoConst.ID_FIELD);
} }
/** /**
...@@ -92,16 +165,28 @@ public class TableStruct { ...@@ -92,16 +165,28 @@ public class TableStruct {
// 遍历字段 // 遍历字段
for (Map.Entry<String, MethodField> entry : fields.entrySet()) { for (Map.Entry<String, MethodField> entry : fields.entrySet()) {
// 字段信息获取 // 字段信息获取
MethodField field = entry.getValue(); MethodField field = entry.getValue();
if (field.getField() == null && field.getGetMethod() == null) { if (field.getField() == null && field.getGetMethod() == null) {
continue; continue;
} }
addMethodField(field);
}
}
/**
* 添加字段
*
* @param field 添加字段
*/
private void addMethodField(MethodField field) {
int fieldAction = DaoConst.FIELD_COMMON;
String fieldName = field.getName(); String fieldName = field.getName();
String fieldInputName = field.getName(); String fieldInputName = field.getName();
Class<?> fieldType = String.class; Class<?> fieldType = String.class;
TableAnnotation annotation = null; TableAnnotation annotation = null;
if (field.getField() != null) { if (field.getField() != null) {
annotation = field.getField().getAnnotation(TableAnnotation.class); annotation = field.getField().getAnnotation(TableAnnotation.class);
...@@ -110,53 +195,82 @@ public class TableStruct { ...@@ -110,53 +195,82 @@ public class TableStruct {
annotation = field.getGetMethod().getAnnotation(TableAnnotation.class); annotation = field.getGetMethod().getAnnotation(TableAnnotation.class);
fieldType = field.getGetMethod().getReturnType(); fieldType = field.getGetMethod().getReturnType();
} }
if (annotation != null) { if (annotation != null) {
fieldName = annotation.value(); fieldName = annotation.value();
fieldAction = annotation.type();
} }
TableFieldVo vo = new TableFieldVo(fieldName, fieldInputName, fieldType); TableFieldVo vo = new TableFieldVo(fieldName, fieldInputName, fieldType);
// 判断是否属于统计字段 int stringAction = getStringAction(vo);
if ("md5key".equals(vo.inputLName)) {
this.md5Key = vo; // 判断是否属于主键
} List<TableFieldVo> commonActionList = this.getFieldActionList(DaoConst.FIELD_COMMON);
if (fieldAction == DaoConst.FIELD_PRIMARY || stringAction == DaoConst.FIELD_PRIMARY) {
// 判断是否是主键,获取主键数据类型 // 移除历史主键,并且将历史主键添加到普通列
if (this.key == null) { List<TableFieldVo> primaryActionList = this.getFieldActionList(DaoConst.FIELD_PRIMARY);
this.key = vo; commonActionList.addAll(primaryActionList);
primaryActionList.clear();
// 将现有列添加到主键
primaryActionList.add(vo);
} else { } else {
this.fields.add(vo); // 将所有非主键列添加到普通列
} commonActionList.add(vo);
} // 处理其他特殊列
} if (fieldAction != DaoConst.FIELD_COMMON) {
// 假如特殊列已经存在,则将已经存在的特殊列删除,并且添加新的特殊列
public TableFieldVo getField(String name) { List<TableFieldVo> actionList = this.getFieldActionList(fieldAction);
if (StringHelper.isEmpty(name)) { actionList.clear();
return null; actionList.add(vo);
} else if (stringAction != DaoConst.FIELD_COMMON) {
// 假如是默认的,并且特殊列已经存在,则不进行任何处理
List<TableFieldVo> actionList = this.getFieldActionList(stringAction);
if (actionList.isEmpty()) {
actionList.add(vo);
} }
for (TableFieldVo fieldVo : this.fields) {
if (fieldVo.lName.equals(name.toLowerCase()) || fieldVo.inputLName.equals(name.toLowerCase())) {
return fieldVo;
} }
} }
return null;
} }
/** /**
* 判断是否包含版本号字段 * 获取字符串动作类型
* *
* @param vo 输入子弹
* @return * @return
*/ */
public TableFieldVo getVersion() { private int getStringAction(TableFieldVo vo) {
return this.getField(DaoConst.VERSION_FLAG); if (getKey() == null) {
return DaoConst.FIELD_PRIMARY;
} else if (DaoConst.REMOVE_FLAG.equals(vo.inputLName)) {
return DaoConst.FIELD_REMOVE;
} else if (DaoConst.VERSION_FLAG.equals(vo.inputLName)) {
return DaoConst.FIELD_VERSION;
}
// 判断是否属于统计字段
else if (DaoConst.MD5_KEY_FLAG.equals(vo.inputLName)) {
return DaoConst.FIELD_MD5;
} else {
return DaoConst.FIELD_COMMON;
}
} }
/** /**
* 判断是否包含remove字段 * 获取某一列
* *
* @param name 列名
* @return * @return
*/ */
private TableFieldVo getRemove() { public TableFieldVo getField(String name) {
return this.getField(DaoConst.REMOVE_FLAG); if (StringHelper.isEmpty(name)) {
return null;
}
for (TableFieldVo fieldVo : this.getFields()) {
if (fieldVo.lName.equals(name.toLowerCase()) || fieldVo.inputLName.equals(name.toLowerCase())) {
return fieldVo;
}
}
return null;
} }
/** /**
...@@ -182,10 +296,10 @@ public class TableStruct { ...@@ -182,10 +296,10 @@ public class TableStruct {
SqlData sql = new SqlData(DaoConst.CREATE, text); SqlData sql = new SqlData(DaoConst.CREATE, text);
String flag = ""; String flag = "";
if (this.getKeyType() == String.class) { if (this.getKeyType() == String.class) {
sql.addParaConst(this.key.inputName, DaoConst.FIELD_CODE, this.key.name, DaoConst.VALUES_CODE, "?"); sql.addParaConst(this.getKey().inputName, DaoConst.FIELD_CODE, this.getKey().name, DaoConst.VALUES_CODE, "?");
flag = ","; flag = ",";
} }
for (TableFieldVo field : this.fields) { for (TableFieldVo field : this.getFields()) {
sql.addParaConst(field.inputName, DaoConst.FIELD_CODE, flag + field.name, DaoConst.VALUES_CODE, flag + "?"); sql.addParaConst(field.inputName, DaoConst.FIELD_CODE, flag + field.name, DaoConst.VALUES_CODE, flag + "?");
flag = ","; flag = ",";
} }
...@@ -203,10 +317,10 @@ public class TableStruct { ...@@ -203,10 +317,10 @@ public class TableStruct {
SqlData sql = new SqlData(DaoConst.UPDATE, text); SqlData sql = new SqlData(DaoConst.UPDATE, text);
TableFieldVo removeField = this.getRemove(); TableFieldVo removeField = this.getRemove();
TableFieldVo versionField = this.getVersion(); TableFieldVo versionField = this.getVersion();
sql.addParaConst(this.key.inputName, sql.addParaConst(this.getKey().inputName,
DaoConst.FIELD_CODE, "" + this.key.name + "=" + this.key.name, DaoConst.FIELD_CODE, "" + this.getKey().name + "=" + this.getKey().name,
DaoConst.WHERE_CODE, " AND " + this.key.name + "=?"); DaoConst.WHERE_CODE, " AND " + this.getKey().name + "=?");
for (TableFieldVo field : this.fields) { for (TableFieldVo field : this.getFields()) {
if (field == removeField || field == versionField) { if (field == removeField || field == versionField) {
continue; continue;
} }
...@@ -269,8 +383,8 @@ public class TableStruct { ...@@ -269,8 +383,8 @@ public class TableStruct {
*/ */
private void addWhereField(SqlData sql, String tag) { private void addWhereField(SqlData sql, String tag) {
TableFieldVo removeField = this.getRemove(); TableFieldVo removeField = this.getRemove();
sql.add(this.key.inputName, " AND " + tag + this.key.name + "=?"); sql.add(this.getKey().inputName, " AND " + tag + this.getKey().name + "=?");
for (TableFieldVo field : this.fields) { for (TableFieldVo field : this.getFields()) {
sql.add(field.inputName, " AND " + tag + field.name + "=?"); sql.add(field.inputName, " AND " + tag + field.name + "=?");
} }
if (removeField != null) { if (removeField != null) {
...@@ -287,7 +401,8 @@ public class TableStruct { ...@@ -287,7 +401,8 @@ public class TableStruct {
*/ */
public void addGroupSql(TableSqlCache sqlTableData, TableFieldString whereFields, TableFieldString updateFields) { public void addGroupSql(TableSqlCache sqlTableData, TableFieldString whereFields, TableFieldString updateFields) {
sqlTableData.add(this.releaseSqlWhere(DaoConst.GROUP_QUERY, DaoConst.LOAD_MODEL, whereFields)); sqlTableData.add(this.releaseSqlWhere(DaoConst.GROUP_QUERY, DaoConst.LOAD_MODEL, whereFields));
sqlTableData.add(this.releaseSql(DaoConst.GROUP_ADD, DaoConst.UPDATE_MODEL, "{FIELD}={FIELD}+?", updateFields, new TableFieldString(this.key.name))); sqlTableData.add(this.releaseSql(DaoConst.GROUP_ADD, DaoConst.UPDATE_MODEL,
"{FIELD}={FIELD}+?", updateFields, new TableFieldString(this.getKey().name)));
} }
/** /**
...@@ -353,7 +468,6 @@ public class TableStruct { ...@@ -353,7 +468,6 @@ public class TableStruct {
tableStruct.add(this.releaseSqlWhere(sqlName, DaoConst.LOAD_MODEL, whereFields)); tableStruct.add(this.releaseSqlWhere(sqlName, DaoConst.LOAD_MODEL, whereFields));
} }
/** /**
* 生成判断数据是否存在的SQL语句 * 生成判断数据是否存在的SQL语句
* *
...@@ -364,7 +478,7 @@ public class TableStruct { ...@@ -364,7 +478,7 @@ public class TableStruct {
public void addExist(TableSqlCache sqlTableData, String sqlName, String[] fields) { public void addExist(TableSqlCache sqlTableData, String sqlName, String[] fields) {
String text = DaoConst.LOAD_MODEL.replace(DaoConst.TABLE_CODE, this.name); String text = DaoConst.LOAD_MODEL.replace(DaoConst.TABLE_CODE, this.name);
SqlData sql = new SqlData(sqlName, text); SqlData sql = new SqlData(sqlName, text);
sql.addPara(this.key.inputName, DaoConst.WHERE_CODE, " AND a." + this.key.name + "<>?"); sql.addPara(this.getKey().inputName, DaoConst.WHERE_CODE, " AND a." + this.getKey().name + "<>?");
for (String field : fields) { for (String field : fields) {
sql.addParaConst(field, DaoConst.WHERE_CODE, " AND a." + field + "=?"); sql.addParaConst(field, DaoConst.WHERE_CODE, " AND a." + field + "=?");
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment