mybatis-plus
mybatis-plus copied to clipboard
希望提供TableInfo和AbstractMethod的增强功能
当前使用版本(必填,否则不予处理)
3.5.4.1
该问题是如何引起的?(确定最新版也有问题再提!!!)
需求场景: 1.在我们的系统中,有一些通用的自定义字段需要在TableInfo中存储,以便后续在做自定义sql生成的时候能够取到。 2.例如,我们有一个租户的字段TENANT_ID,在我们的研发约定中,只有baseMapper中的方法才会默认增加基于TENANT_ID的查询,在mapper.xml中的sql需要研发手动管理。
目前的解决方案:
主要通过AspectJ在编译时对TableInfo和AbstractMethod进行替换。
1.将TableInfo替换为自定义的CustomTableInfo,进行增强
2.对AbstractMethod所有调用sqlWhereByMap/sqlWhereEntityWrapper的地方进行增强
选择改方案的理由:
- TableInfoHelper中init出来的TableInfo无法直接替换。187行中的TableInfo是new出来的,此处没有提供Factory之类的类做外部控制;201行的postTableInfo返回值为void,只能对现有TableInfo做增强而无法替换成其他任何子类。
2.默认提供的AbstractMethod注册方式,全都是通过new来处理的,如果要使用类似于spring的aop增强,我需要将其全部声明为springbean,并自定义完整的注册逻辑
希望的解决方案:
- 提供类似TableInfoFactory的类型在初始化TableInfo的时候进行外部控制
- 提供返回值为TableInfo的后置处理器类,以在初始化后进行替换TableInfo
- 是否能默认将AbstractMethod声明为容器bean,并且DefaultSqlInjector从容器中获取默认AbstractMethod
重现步骤(如果有就写完整)
报错信息
3是不可能的
是否可以提供一套小型的IOC接口,通过IOC接口来对现有mybatisplus的组件进行管理。通过该接口的不同实现,也能兼容对不同外部IOC框架的访问。 @miemieYaho
@miemieYaho hi,我注意到在3.5.5版本中PostInitTableInfoHandler已经提供creteTableInfo方法且所有的byMap方法全部改为了wrapper实现。从这个版本开始,重写TableInfo.getAllSqlWhere已经能在一定情况下解决我们的场景。但是原始FiledInfo中的属性不太能够完全覆盖我们的需求。
能否在PostInitTableInfoHandler中提供一个createFieldInfo方法呢,类似于createTableInfo,这有助于我们自己来定制Field。