关于自动合并依赖项的小工具

机制设计讲解

外键依赖自动解析机制共由三部分组成:实体层键注解、配置读取器、配置管理中心。
其中:实体层键注解用于在外键依赖的键上定义外键依赖关系,以及对应的根据外键的查询/删除/合并方法;配置读取器用于在springboot运行时扫描实体层包下面的所有类中定义的外键关系,解析外键关系,并将解析的结果存储至配置管理中心,并提供配置管理中心的实例bean给spring bean工厂;配置管理中心用于在程序运行过程中缓存所有外键依赖关系、对应的service对象、各个已定义方法,并提供对外查询函数以查询外键依赖关系和附加信息。

机制详解:
在这里插入图片描述
1、entity包下该包内的三个类是示例实体类,定义了三个数据库表对应的持久层实体类。其中:
a)father类中有键id
b)children1类中有键id,键fatherId(外键关联father表中id字段)
在children1中,通过对外键依赖的键增加注解
@ForeignInfo(targetClass = Father.class, foreignKey = “id”, serviceClass = Children1ServiceImpl.class)
指定了该外键fatherId依赖的数据库表的对应实体类” Father.class “,依赖的对应实体类的键名为”id“,并指定了提供三个默认命名为:searchNumByForeignKey、deleteByForeignKey、mergeByForeignKey的方法的类为Children1ServiceImpl.class。(如果采用了其他命名,在这里的注解中可以追加定义)
在这里插入图片描述
在这里插入图片描述

2、配置读取器将扫描定义包下的所有类,并将类中所有Field进行解析,若字段附加了ForeignInfo注解,读取器将解析注解中包含的附加信息,并注册到配置管理中心中:
在这里插入图片描述

3、配置管理中心将在软件运行中缓存所有注册的依赖关系,并对外提供查询功能:
在这里插入图片描述

4、 如果需要对某个表进行删除(合并),此时需要思考有哪些表依赖了即将被删除(弃用)的数据。针对删除操作,需要依次执行这些表中的查询函数,查询是否仍有数据依赖当前即将被删除的数据,若没有才可以执行删除;针对合并操作,同样需要依次执行这些表中的查询函数,若存在数据依赖即将被弃用的数据,那么需要将这些数据中依赖于即将被弃用的数据中的外键改为将会保留下来的数据的对应键。

有什么用?

上述机制可以将“思考有哪些表依赖了即将被删除(弃用)的数据“,”查询“,”合并“的操作自动化。
我们开发组织表时,如果其他表都还没开发,那么每开发一个会依赖组织表的表,就需要对组织表的删除(合并)进行修改;但如果使用了上述机制,那么组织表的删除(合并)代码就不需要进行更改,只需要在开发到对应表的时候添加对应的三个依赖函数,并标识依赖关系,配置注册+管理中心就会自动帮助我们进行添加。

使用它需要做什么?

1、针对每个外键,都需要在实体层(entity包)中定义上述注解,并在注解中标识的服务类中实现三个服务方法,用于对本实体进行操作,共分三类操作:通过该键进行查询、通过该键进行删除、针对此键将两个取值的所有对象合并。此三类操作将简化被依赖键的合并/依赖检索。如下图:

2、在TEST包Children1Test中提供了三种基础操作的示例,在编写需要使用依赖关系的位置可以仿照编写:

3、在Children1ServiceImpl中提供了一个对本实体进行merge的函数的标准示例,可仿照编写(与TEST类中merge有重合,可以理解后选取喜欢的方式进行编写或拓展)。

未来优化

1、直接将冗余且相似的“merge”触发函数置于配置管理中心的触发器
2、可以使用反射+mybatisplus,自动生成查询、删除。无需在注解中配置服务方法,也无需在服务层进行更多的重复的查询、删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值