
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.3.3 saveInst服务
saveInst服务将实例保存到数据库,服务接口定义在InstService中,实现如下:

saveInst服务在调用DM层InstDMService之前,先对入参inst进行预处理,根据入参inst.getBusinessType,inst.getDnaCode从DnaCacheService获取Dna,然后遍历inst树节点,设置每一个inst节点的属性dna。InstVisitor.visitInst是递归遍历实例的公共方法,其代码如下:

这是对实例的递归遍历,每遍历到实例的节点,都调用visitor.visit接口方法。服务saveInst递归设置Dna之后,调用InstDMService.saveInst方法,代码如下:

在服务InstDMService.saveInst中递归遍历参数inst下的cells数组,根据cell.operationFlag属性判断每一个对象cell是新增、修改或者删除,然后分别调用DAO的方法进行持久化。当处理好inst节点之后,递归处理每一个孩子节点。实例的数据结构由Dna决定,实例如何映射到数据库由Dna上的属性dbMapCode决定,该属性定位到DnaDbMap对象,后者包含如何映射到数据库表的配置信息。为了性能考虑,DnaDbMap对象也加载到内存,使用时从内存中直接得到。因此,在调用DAO服务之前,从dbMapCacheService.getDnaDbMap方法返回DnaDbMap对象,作为参数传送到DAO服务。关于实例到数据库映射的详细处理逻辑,将在下一章专门介绍。