当前使用版本(必填,否则不予处理)
3.4.1
该问题是如何引起的?(确定最新版也有问题再提!!!)
部分字段需要加密存储,同时该字段也需要被当作查询条件,现在当改字段当作查询条件时,typehandler不生效
重现步骤(如果有就写完整)
实体: @TableName(value = "t_user", autoResultMap = true) public class UserEntity {
@TableId
private String id;
@TableField(typeHandler = EncryptHandler.class)
private String idCard;
private String name;
}
service 这样子使用 userMapper.selectList(Wrappers.lambdaQuery(UserEntity.class) .eq(UserEntity::getIdCard,idCard))
typehandler 代码:
@MappedJdbcTypes(JdbcType.VARCHAR)
public class EncryptHandler implements TypeHandler
@Override
public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
String encrypt = parameter+"PPPPPPPP";
ps.setString(i, encrypt);
}
} 结果查询条件idcard并不会拼上"PPPPPPPP"; 新增和修改却是正常的
报错信息
无报错信息
Comment From: Casonhqc
MP的条件构造器是不支持TypeHandler的。 你可以看下这个开源工具类项目 https://gitee.com/dromara/stream-query 我有参与开源,写了一个QueryCondition工具类来支持TypeHandler http://stream-query.dromara.org/pages/acd195/#%E6%9D%A1%E4%BB%B6%E6%9F%A5%E8%AF%A2%E6%9E%84%E9%80%A0%E5%99%A8
Comment From: qmdx
可以利用下面的方法来实现传递 typeHandler 的条件
/**
* 处理入参
*
* @param mapping 例如: "javaType=int,jdbcType=NUMERIC,typeHandler=xxx.xxx.MyTypeHandler" 这种
* @param param 参数
* @return value
*/
protected final String formatParam(String mapping, Object param) {
final String genParamName = Constants.WRAPPER_PARAM + paramNameSeq.incrementAndGet();
final String paramStr = getParamAlias() + Constants.WRAPPER_PARAM_MIDDLE + genParamName;
paramNameValuePairs.put(genParamName, param);
return SqlScriptUtils.safeParam(paramStr, mapping);
}
Comment From: qmdx
https://github.com/baomidou/mybatis-plus/commit/92ebd4aa0e3f05f2a4bf760bc9e0cd78e72cedd1 等待新版本发布
Comment From: limng06
92ebd4a 等待新版本发布
新版本采用了吗 我看最新的里面也没有包含这个功能
我看了历史记录 貌似又取消了? 什么考量呢