总结工作中学到的(一)
项目中遇见了一种情况。如图:
这是个动态表单,可以按行添加数据。其中,Json 格式的数据可能存在下一级。即存在父子级的关系了。
首先说下:这种类型的数据,对应在数据库里多张表没必要,单张表自关联即可。
其次到本文重点,如何将这样的数据结构保存到数据库里。对应的业务场景有两种:
一种是实时保存,添加一行数据后即保存并实时返回新插入的数据信息(其实主要是主键id)。这样做的话,涉及到父子级的时候,就可以先添加父级,同时返回父级信息,里面的parentId即可以赋予子级行数据。即可实现父子级数据的保存;
第二种是只保存一次,这时候父子级是同时传给后台入库的。这时候对于子级数据来说并没有指定父级id,直接保存是无法实现的。我想了一种方式,就是把这个最重要保存的所有东西直接搞成一个大的 Json 串儿,Json既保存了数据又保存了数据之间的关系。这样子我后端就可以自己解析使用了。但是这多了一层复杂度,不好,不好。
老司机告诉我:你可以在数据传输对象里在添加一个数据对象的List列表来接收数据,这样子有子级的就存到对象里的
具体为:上文一行数据对应一个LogAnalysisConfigDto
类,我现在设计一个LogAnalysisConfigCustomDto
增强类,继承自LogAnalysisConfigDto
并添加属性private List<LogAnalysisConfigDto> analysisConfigDtoList;
。这样子整个类结构为:
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* @author kangjia
* @date 2019/11/4 15:52
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "日志分析配置增强类", description = "日志分析配置增强类")
public class LogAnalysisConfigCustomDto extends LogAnalysisConfigDto {
/**
* 子级关系
*/
private List<LogAnalysisConfigDto> analysisConfigDtoList;
}
设计成这样子,后端保存的时候判断下属性 list是否为null,分两种情况进行入库即可。