tkmybatis @ColumnType 注解添加typehandler不生效

问题是这样的,mysql 5.7后支持json 字段 ,我有一张学生表,举例如下

字段名字段类型描述
namevarchar姓名
statusjson状态 如 正常、异常

对应的实体类如下

string name;

 @ColumnType(column = "undertake_sc_uids",typeHandler=ListTypeHandler.class
List<string> status;

为了将数据插入db,我定义了一个typehandler

public class ListTypeHandler extends BaseTypeHandler<List<String>> {
    
    
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException {
        if (CollectionUtil.isNotEmpty(parameter)){
            ps.setString(i,JSON.toJSONString(parameter));
        }
    }
    
    @Override
    public List<String> getNullableResult(ResultSet rs, String columnName) throws SQLException {
        String value = rs.getString(columnName);
        List<String> list=new ArrayList<>();
        if (StringUtils.isNotBlank(value)){
            list=JSON.parseArray(value,String.class);
        }
        return list;
    }
    
    @Override
    public List<String> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        String value = rs.getString(columnIndex);
        List<String> list=new ArrayList<>();
        if (StringUtils.isNotBlank(value)){
            list=JSON.parseArray(value,String.class);
        }
        return list;
    }
    
    @Override
    public List<String> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        String value = cs.getString(columnIndex);
        List<String> list=new ArrayList<>();
        if (StringUtils.isNotBlank(value)){
            list=JSON.parseArray(value,String.class);
        }
        return list;
    }
}

然后通过tkmybatis插入数据库时发现,他把我status字段忽略掉了

@ColumnType(column = "undertake_sc_uids",typeHandler=ListTypeHandler.class)拆分为
@ColumnType(typeHandler=ListTypeHandler.class)
@Column(name = "undertake_sc_uids") 试试,
如果不行同时在xml文件中仿照下图添加你自定义的转换器试试,注意观察控制台有没有报错,并在ListTypeHandler 中的setNonNullParameter方法中打断点debug模式测试,观察下sql语句及传值情况

如果你在全局配置了typehandler,xml文件中也配置了typehandler,发现还是无效,可以试一试下面这个解决方法。(个人感觉是tkmapper的问题,只使用mybatis就没有这个问题)

请在字段上添加@ColumnType注解。例如:

img

typeHandlersPackage配置了没

自己debug走了下,他这个只有通用mapper的基类方法才起作用,对于自己写的sql,需要自己去指定type Handler

@ColumnType(jdbcType= JdbcType.ARRAY,typeHandler=ListTypeHandler.class
@Column(name="undertake_sc_uids")
List<string> status;