Skip to content

mybatis plus TableField typehandler 问题 #357

Closed
@xgj1988

Description

@xgj1988

# 问题描述:
查询的时候,如果用mybatis mapper 配置返回的查询,typehandler会起作用,但是用ServiceImpl(mybatis plus 的类)的selecrtById(其实任何查询方法都可以),那么TableField 配置的TypeHandler就不起作用,看如下代码。
# 代码:
JAVA代码判断
@TableField(el = "images, typeHandler=com.zyzc.xyzy.config.db.JsonTypeHandler")
private List images;

Mybatis XML代码片段

# 原因分析
我跟踪代码的时候发现了这一点。就是在在用ServiceImpl的selectById的时候。
执行到mybatis的DefaultResultSetHandler的 typeHandlerRegistry.hasTypeHandler(propertyType, rsw.getJdbcType(columnName)) 这个方法的时候,返回的是false。这个方法里面又去比较的是 TypeHandlerRegistry的 TYPE_HANDLER_MAP 这个集合比较的。而且是用的java.util.list这个类去找的。确实没找到。。但是为什么 mybatis 那种可以。。因为时间关系,我就没往下看了。。

# 结论
我认为我这个问题可能要么就是我配置错了(TableFiled上面),要么就是MybatisPlus的一个BUG。

Activity

xgj1988

xgj1988 commented on Jun 13, 2018

@xgj1988
Author

# 补充一下
奇怪的是插入的时候typehandler 又是生效的,,就是 查询的时候 无效。

qmdx

qmdx commented on Jun 19, 2018

@qmdx
Member

查询的 sql 你打印下看看,我们 源码测试用例里面有一个 typeHandler 的例子你可以参考下

zhiqizhu

zhiqizhu commented on Jul 26, 2018

@zhiqizhu

遇到同样的问题,打印的SQL没有问题,我认为是MybatisPlus的BUG

xiao0yy

xiao0yy commented on Jul 27, 2018

@xiao0yy

在@TableField中指定typeHandler,所有的BaseMapper的查询相关方法都不会生效.但又无法在BaseMapper指定ResultMap.求帮助.

spencexu

spencexu commented on Aug 13, 2018

@spencexu

遇到同样的问题,插入更新没问题,查询的时候使用了默认的handler

miemieYaho

miemieYaho commented on Aug 13, 2018

@miemieYaho
Contributor

写 resultMap,TableName注解指定该 resultMap

ynfatal

ynfatal commented on Sep 11, 2018

@ynfatal

@spencexu 那最后你怎么解决这个问题,能否指点一下,谢谢

spencexu

spencexu commented on Sep 11, 2018

@spencexu

@ynfatal TableField和resultMap都配置了typeHandler,一个处理查询一个处理更新,测试了一下,确实是可以的

vnobo

vnobo commented on Jul 2, 2019

@vnobo

这个问题,还没有修复,最新版 3.1.2

haochencheng

haochencheng commented on Aug 16, 2019

@haochencheng

see
https://mp.baomidou.com/config/#typehandlerspackage

在配置文件中添加配置
mybatis-plus:
typeHandlersPackage:

givedrug

givedrug commented on Nov 27, 2019

@givedrug

@TableName(value = "project",autoResultMap = true)
加上autoResultMap可以了!

typeHandlersPackage倒是无所谓加不加

664623107

664623107 commented on Apr 30, 2020

@664623107

@miemieYaho 如果是自定义SQL的话,这个问题仍然存在,加上@TableName(autoResultMap = true)也没用,只能自己加ResultMap

miemieYaho

miemieYaho commented on Apr 30, 2020

@miemieYaho
Contributor

本来就这样的

664623107

664623107 commented on Apr 30, 2020

@664623107

@miemieYaho OK,知道不能那么用就放心了,但不是很理解为什么不能……

10 remaining items

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @qmdx@cainli@vnobo@spencexu@rogue2yjg

        Issue actions

          mybatis plus TableField typehandler 问题 · Issue #357 · baomidou/mybatis-plus