Browse Source

save 方法添加 beforeQuery 参数是否根据id查询有没有数据

吕金泽 4 years ago
parent
commit
fc0a206aec

+ 25 - 3
magic-api/src/main/java/org/ssssssss/magicapi/modules/table/NamedTable.java

@@ -157,20 +157,42 @@ public class NamedTable {
 
 	@Comment("保存到表中,当主键有值时则修改,否则插入")
 	public Object save() {
-		return this.save(null);
+		return this.save(null,false);
 	}
 
 	@Comment("保存到表中,当主键有值时则修改,否则插入")
-	public Object save(@Comment("各项列和值") Map<String, Object> data) {
+	public Object save(@Comment("各项列和值") Map<String, Object> data, @Comment("是否根据id查询有没有数据") boolean beforeQuery) {
 		if (StringUtils.isBlank(this.primary)) {
 			throw new MagicAPIException("请设置主键");
 		}
-		if (StringUtils.isNotBlank(Objects.toString(this.columns.get(this.primary), "")) || (data != null && StringUtils.isNotBlank(Objects.toString(data.get(this.primary), "")))) {
+		String primaryValue = Objects.toString(this.columns.get(this.primary), "");
+		if(StringUtils.isBlank(primaryValue) && data != null){
+			primaryValue = Objects.toString(data.get(this.primary), "");
+		}
+		if(beforeQuery){
+			if(StringUtils.isNotBlank(primaryValue)){
+				List<Object> params = new ArrayList<>();
+				params.add(primaryValue);
+				Map<String, Object> oneMap = sqlModule.selectOne(new BoundSql("select count(1) count from " + this.tableName + " where " + this.primary + " = ?", params, sqlModule));
+				Integer count = new Integer(oneMap.get("count").toString());
+				if(count == 0){
+					return insert(data);
+				}
+				return update(data);
+			} else {
+				return insert(data);
+			}
+		}
+		if (StringUtils.isNotBlank(primaryValue)) {
 			return update(data);
 		}
 		return insert(data);
 	}
 
+	@Comment("保存到表中,当主键有值时则修改,否则插入")
+	public Object save(boolean beforeQuery) {
+		return this.save(null, beforeQuery);
+	}
 
 	@Comment("执行`select`查询")
 	public List<Map<String, Object>> select() {

+ 11 - 1
magic-api/src/main/java/org/ssssssss/magicapi/modules/table/Where.java

@@ -350,9 +350,19 @@ public class Where {
 		return namedTable.save();
 	}
 
+	@Comment("保存到表中,当主键有值时则修改,否则插入")
+	public Object save(@Comment("是否根据id查询有没有数据") boolean beforeQuery) {
+		return namedTable.save(beforeQuery);
+	}
+
 	@Comment("保存到表中,当主键有值时则修改,否则插入")
 	public Object save(@Comment("各项列和值") Map<String, Object> data) {
-		return namedTable.save(data);
+		return namedTable.save(data, false);
+	}
+
+	@Comment("保存到表中,当主键有值时则修改,否则插入")
+	public Object save(@Comment("各项列和值") Map<String, Object> data, @Comment("是否根据id查询有没有数据") boolean beforeQuery) {
+		return namedTable.save(data, beforeQuery);
 	}
 
 	@Comment("执行插入语句,返回主键")