Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

希望提供TableInfo和AbstractMethod的增强功能 #5871

Open
chess3cake opened this issue Dec 22, 2023 · 3 comments
Open

希望提供TableInfo和AbstractMethod的增强功能 #5871

chess3cake opened this issue Dec 22, 2023 · 3 comments

Comments

@chess3cake
Copy link

当前使用版本(必填,否则不予处理)

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的地方进行增强
image
image

选择改方案的理由:

  1. TableInfoHelper中init出来的TableInfo无法直接替换。187行中的TableInfo是new出来的,此处没有提供Factory之类的类做外部控制;201行的postTableInfo返回值为void,只能对现有TableInfo做增强而无法替换成其他任何子类。
image

2.默认提供的AbstractMethod注册方式,全都是通过new来处理的,如果要使用类似于spring的aop增强,我需要将其全部声明为springbean,并自定义完整的注册逻辑
image

希望的解决方案:

  1. 提供类似TableInfoFactory的类型在初始化TableInfo的时候进行外部控制
  2. 提供返回值为TableInfo的后置处理器类,以在初始化后进行替换TableInfo
  3. 是否能默认将AbstractMethod声明为容器bean,并且DefaultSqlInjector从容器中获取默认AbstractMethod

重现步骤(如果有就写完整)

报错信息

@miemieYaho
Copy link
Member

3是不可能的

@chess3cake
Copy link
Author

是否可以提供一套小型的IOC接口,通过IOC接口来对现有mybatisplus的组件进行管理。通过该接口的不同实现,也能兼容对不同外部IOC框架的访问。 @miemieYaho

@chess3cake
Copy link
Author

@miemieYaho hi,我注意到在3.5.5版本中PostInitTableInfoHandler已经提供creteTableInfo方法且所有的byMap方法全部改为了wrapper实现。从这个版本开始,重写TableInfo.getAllSqlWhere已经能在一定情况下解决我们的场景。但是原始FiledInfo中的属性不太能够完全覆盖我们的需求。

能否在PostInitTableInfoHandler中提供一个createFieldInfo方法呢,类似于createTableInfo,这有助于我们自己来定制Field。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants