确认

  • [X] 我的版本是最新版本, 我的版本号与 version 相同, 并且项目里无依赖冲突
  • [X] 我已经在 issue 中搜索过, 确认问题没有被提出过
  • [X] 我已经修改标题, 将标题中的 描述 替换为遇到的问题

功能改进

自定义typeHandler 能够通过@TableField注解绑定到指定的表的字段上, 而不是所有的同名字段。在setNonNullParameter和getNullableResult方法中,似乎可以在指定表字段上添加外的注解来进行判断过滤, 但比较麻烦, 能否用@TableField(typeHandler = xxTypeHandler.class)来进行唯一绑定呢?

参考资料

No response

Comment From: miemieYaho

本来就是指定那一个字段,哪来的还影响同名的? 你是不是把这个typehandler注入到全局了

Comment From: HY-love-sleep

本来就是指定那一个字段,哪来的还影响同名的? 你是不是把这个typehandler注入到全局了 @Getter @Setter public class UserEntity extends BaseEntity { ... @TableField(typeHandler = CryptoTypeHandler.class) private String account; } 我通过这种方式使用的自定义TypeHandler, 本意是只有用户表的account被处理, 但是项目中所有表中的account字段都会被处理,应该是在哪里配置吗

Comment From: miemieYaho

你说不清楚就以git形式给出你的复现demo

Comment From: HY-love-sleep

你说不清楚就以git形式给出你的复现demo

您好, 我给您详细解释一下。我项目中需要对敏感字段例如account加密存储, 所以我自定义了一个CryptoTypeHandler实现了BaseTypeHandler, 在setNonNullParameter和getNullableResult方法中实现了加解密逻辑。然后在用户表对应的实体类UserEntity 的account字段上, 添加了@TableField(typeHandler = CryptoTypeHandler.class)注解。 目前用户表确实在插入时加密并在查询时解密了。 但是例如我有一张租户表对应TenantEntity,其中也有account字段, 这个字段我并不想加解密, 我也没有在实体类字段中添加@TableField(typeHandler = CryptoTypeHandler.class)注解,但是很奇怪这个租户表中的account字段也会进入CryptoTypeHandler进行加解密。 CryptoTypeHandler是直接注入到spring容器中的, 是因为这是一个全局的吗。

Comment From: miemieYaho

上面不是问了你是不是注入到全局了,你注入到全局那生效范围就是所有指定类型的字段

Comment From: HY-love-sleep

明白了大佬,感谢

Comment From: Aikaxiya

BaseTypeHandler我遇到类似问题 @TableField(typeHandler = IntegerListHandler.class) private List roomId;

数据库是1,2,3类似这样的数据 有时候查询没问题可以正确返回,有时候就报错 在代码不修改的情况下 时好时坏,启动n次发现的

@MappedJdbcTypes(JdbcType.VARCHAR) @MappedTypes({List.class}) public class IntegerListHandler extends BaseTypeHandler<List<Integer>> {}