chess3cake
chess3cake
### 当前使用版本(必填,否则不予处理) 3.5.5 ### 该问题是如何引起的?(确定最新版也有问题再提!!!) QueryWrapper/LambdaQueryWrapper中调用super.initNeed(),无法调用子类方法   ### 重现步骤(如果有就写完整) ### 报错信息 ### 期望 期望是调用this.initNeed()/setEntity(),这样可以允许调用子类方法
### 当前使用版本(必填,否则不予处理) 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的地方进行增强 选择改方案的理由: 1. TableInfoHelper中init出来的TableInfo无法直接替换。187行中的TableInfo是new出来的,此处没有提供Factory之类的类做外部控制;201行的postTableInfo返回值为void,只能对现有TableInfo做增强而无法替换成其他任何子类。 2.默认提供的AbstractMethod注册方式,全都是通过new来处理的,如果要使用类似于spring的aop增强,我需要将其全部声明为springbean,并自定义完整的注册逻辑 希望的解决方案: 1. 提供类似TableInfoFactory的类型在初始化TableInfo的时候进行外部控制 2. 提供返回值为TableInfo的后置处理器类,以在初始化后进行替换TableInfo 3. 是否能默认将AbstractMethod声明为容器bean,并且DefaultSqlInjector从容器中获取默认AbstractMethod ### 重现步骤(如果有就写完整) ### 报错信息