import java.util.concurrent.ConcurrentHashMap; //导入方法依赖的package包/类
/**
* 生成更新Sql
* @param entity
* @param parameter
* @return
*/
protected SqlParmeter generateUpdateSql(T entity, HeaMap parameter) {
initEntityInfo(this.entityType);
String entityName = getEntityName();
Entity entityInfo = entityMap.get(entityName);
String tableName = entityInfo.getTableName();
SqlParmeter sqlParmeter = new SqlParmeter();
if (null == parameter) {
parameter = new HeaMap();
}
if (parameter.size() == 0) {
throw new RuntimeException("必须传人参数!");
}
List params = new ArrayList();
ConcurrentHashMap aliasMap = new ConcurrentHashMap();
StringBuffer whereSql = new StringBuffer();// 包含where后面的sql语局
String link = "where";// 第一个默认连接是where
boolean firstQueryFlag = true;// 是否是第一个需查项
List groupSqlList = new ArrayList();
for (Entry entry : parameter.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
key = filterKey(key);
if (key.startsWith(HeaConstant.Instruction.ADDGROUP)) {
groupSqlList = getOrder(groupSqlList, value);
continue;
}
ColumnCondition columnCondition = new ColumnCondition();
columnCondition = analyzeKey(columnCondition, key, value);
if (!columnCondition.getIfQuery()) {
continue;
}
if (!firstQueryFlag) {
link = columnCondition.getAndOr();
}
whereSql.append(HStringUtils.format(" {0} {1}", link, columnCondition.getSqlFragment()));
if (null != columnCondition.getCookedValue()) {
params.addAll(columnCondition.getCookedValue());
}
firstQueryFlag = false;
}
String whereSqlStr = whereSql.toString();
String groupSql = "";
if (groupSqlList.size() > 0) {
groupSql = " group by " + HStringUtils.StrList(groupSqlList, ",");
}
String tempStr = HStringUtils.addStr(whereSqlStr, groupSql);
aliasMap.putAll(HOrmUtil.getAliasFromSql(tempStr));
// 分析得到joinSql
String joinSql = "";
if (!aliasMap.isEmpty()) {
HHashMap joinSqlMap = new HHashMap();
analyzeAliasMap(aliasMap, joinSqlMap);
joinSql = getJoinSql(joinSqlMap);
}
String tableSqlStr = HStringUtils.format("{0} t {1}", tableName, joinSql);
Map viewParams = parameter.getViewParams();
TableSql tableSql = getTableSql(tableSqlStr, viewParams);
tableSqlStr = tableSql.getTargetTableSql();
List tableParams = tableSql.getParams();
// 获得setSql
SqlFragment setSqlEntity = getUpdateSetSql(entity, entityInfo, parameter.getUpdateNullMap());
// 0:tableSql 1:setSql 2:where
String sql = HStringUtils.format("update {0} set {1} {2}", tableSqlStr, setSqlEntity.getSql(), whereSqlStr);
// String sql = StringUtils.format("delete t from {0} {1}",
// tableSqlStr, whereSqlStr);
sqlParmeter.setSql(sql);
tableParams.addAll(setSqlEntity.getParams());// set
tableParams.addAll(params);
sqlParmeter.setParameters(tableParams.toArray());
return sqlParmeter;
}