springboot+mybatis踩坑记录

踩坑记录
项目为支持枚举直接映射成数据库字段,定义了

@MappedTypes({EnumA.class})
@MappedJdbcTypes(JdbcType.CHAR)
public class EnumTypeHandler <E extends Enum<E>> extends BaseTypeHandler<E> {
//代码细节
}

springboot在启动的时候会在类中TypeHandlerRegistry先去注册所有系统默认的handler,也会将我们定义的handler加载进去。
在idea中运行的时候,很顺利。能将自定义的数据库字段转换成预期的枚举。
然而打包成jar运行后,居然提示No typehandler found for property xxx
首先定位到异常抛出到点
ResultMapping中的validate方法,idea打断点的时候看typeHandler是有值的,但是打成jar包之后,返回却是空的。
猜测,是不是注册的时候出问题了。
SqlSessionFactoryBean定位到hasLength(this.typeHandlersPackage)这一行,typeHandlersPackage这个属性以配置过。
进到register方法
在这里插入图片描述
idea断点看到到handlerSet有自定义到class被加载。
jar包打印出来到日志,handlerSet居然是空的。
看下resolverUtil.find()方法。
在这里插入图片描述
上面因为VFS没指定,所以用的是默认的DefaultVFS.
从jar中打印的日志看出children为空,进入list,再进入list
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里,jar中发现line为空,而idea中能正常读到类到class名称。
是不是springboot对使用版本对mybatis不兼容问题?
SpringBoot有自己的mybatis/starter,然后先将mybatis包换掉
org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.0
然后在代码中指定自己的SpringBootVFS

SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setVfs(SpringBootVFS.class);

附上mybatis官方git问题说明
https://github.com/mybatis/mybatis-3/issues/325

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值