mybatis-plus icon indicating copy to clipboard operation
mybatis-plus copied to clipboard

TypeHandler 处理String编码,使用lambda表达式,like查询不生效

Open zhaofy2323 opened this issue 3 years ago • 2 comments
trafficstars

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

3.4.3

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

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

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


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

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

zhaofy2323 avatar Dec 24 '21 04:12 zhaofy2323

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

spenie avatar Feb 10 '22 03:02 spenie

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

VampireAchao avatar Apr 20 '22 14:04 VampireAchao

正如楼上说的默认 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"

qmdx avatar Dec 23 '22 07:12 qmdx