baomidou / mybatis-plus

An powerful enhanced toolkit of MyBatis for simplify development
https://baomidou.com
Apache License 2.0
16.37k stars 4.31k forks source link

TypeHandler的泛型擦除问题 #5913

Closed ityangkai-coder closed 9 months ago

ityangkai-coder commented 9 months ago

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

3.5.5

该问题是如何引起的?(确定最新版也有问题再提!!!)

关于TypeHandler的泛型擦除问题,例如我们想使用List作为属性值,使用统一的TypeHandler处理此种场景,无论T为什么对象,都可以完成使用同一个Handler,不用为此写多种Handler进行处理,是不是更方便。如果是担心对整体带来影响,是否可以给开发者留一个扩展口,让用户自定义Handler的register,这样用户可以自己实现泛型的扩展(甚至更特殊的操作),等Mybatis解决泛型后(mybatis三年前就开始说修了,还没修复,求扩展口ing),我们切换至后续的版本,而不用一直等待Mybatis的问题解决 问题1:TableFieldInfo中的field字段存储了泛型真实字段为什么不用,或者不传递至Handler中,供用户自行选择使用呢?反而仅仅用propertyType反射出TypeHandler实例? image image

问题2:是否已经有类似的实现方式已经存在?这里我并未查询到。 问题3:如果将Field传递至Handler中是否会存在隐藏Bug出现?导致团队未想到这种方式? 例如类似的实现方式: image 问题4:mybatis其他团队,如Mybatis-Flex实现了此方案,为何MybatisPlus团队不选择实现呢,我看之前的Issues也提到过类似的问题。 下面是Mybatis-Flex团队的开源代码: 1704605926373 image

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

重现步骤:

  1. 使用JacksonTypeHandler作为typeHandler,
  2. List作为属性类型
  3. 在JacksonTypeHandler type中,仅为List的Class,T的泛型属性被擦除

报错信息

rowstop commented 9 months ago

可以使用自定义 typehandler ,使用 TypeRefrence 实现

ityangkai-coder commented 9 months ago

可以使用自定义 typehandler ,使用 TypeRefrence 实现

虚心请教!!能不能给个demo

rowstop commented 9 months ago

参考 1 参考 2