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

3.4.3

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

发现 model 的字段指定了 typehandler ,但是在使用 LambdaQueryWrapper查询的时候,发现 where 的like字段没有经过 typehandler 处理

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

~~~java

@TableField(value = "title", typeHandler = StringTypeHandler.class) private String title;

LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.like(StrUtil.isNotBlank(title), Entity::getTitle, title); queryWrapper.orderByDesc(Entity::getType,Entity::getNdate,Entity::getNdate); List specEntityList = this.list(queryWrapper);

Comment From: spenie

只是对数据库和程序之间的数据转换,查询条件不会调用。

Comment From: VampireAchao

只是对数据库和程序之间的数据转换,查询条件不会调用。

Comment From: qmdx

正如楼上说的默认 wrapper 是不会调用 typeHandler 如果你想调用可以参考

    /**
     * 内部自用
     * <p>拼接 LIKE 以及 值</p>
     */
    protected Children likeValue(boolean condition, SqlKeyword keyword, R column, Object val, SqlLike sqlLike) {
        return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(column), keyword,
            () -> formatParam(null, SqlUtils.concatLike(val, sqlLike))));
    }

这个方法 formatParam 参数 null 部分传入 typeHandler 映射,例如: "javaType=int,jdbcType=NUMERIC,typeHandler=xxx.xxx.MyTypeHandler"