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

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 等待新版本发布

新版本采用了吗 我看最新的里面也没有包含这个功能

我看了历史记录 貌似又取消了? 什么考量呢