当前使用版本(必填,否则不予处理)
mybatis-plus 3.4.0
该问题是如何引起的?(确定最新版也有问题再提!!!)
表里面有一个敏感字段email是加密存储的,采用类似md5不可逆的密文存储。但是该字段需要支持查询。
因此在字段TableField上配置了typeHandler。但是根据email查询时候,发现没有走到配置的CipherHandler, 导致根据明文进行了sql查询,无法查询出数据。
@TableName(value = "t_user_info", autoResultMap = true)
public class UserInfo implements Serializable {
@TableField(value = "email",
typeHandler = CipherHandler.class)
private String email;
经过反复验证发现
- 从java到jdbc的过程,配置在TableField上的typeHandler无法生效。
- 从jdbc到java过程,配置在TableField上的typeHandler可以生效。
报错信息
Comment From: zhouwenjun0820
遇到了一样的问题,配置typeHandler的字段,比如插入时加密,查询时解密,都是OK的,但是该字段作为查询条件时并不会应用到typeHandler,导致因为查询条件是明文,库里是密文,而查询结果是空,只能手动将查询条件加密,然后执行查询才行!
Comment From: qmdx
亲给出演示重现 demo
Comment From: qmdx
如果你是 wrapper typehandler 不生效查看 https://github.com/baomidou/mybatis-plus/issues/3709
加解密你也可以尝试 https://baomidou.com/guide/mybatis-mate.html#%E5%AD%97%E6%AE%B5%E5%8A%A0%E5%AF%86%E8%A7%A3%E5%AF%86