如何为mybatis-spring-boot映射EnumOrdinalTypeHandler?

时间:2017-06-22 05:27:02

标签: mybatis spring-mybatis

我现在正在使用Mybatis和spring-boot。我没有添加mybatis-config.xml。我通过application.properties从指令中为数据源和mybatis进行了所有配置 mybatis-spring-boot-autoconfigure如下

### Database Configuration
spring.datasource.url=jdbc:sqlserver://localhost;databaseName=mywebsite;catalogName=mywebsite
spring.datasource.username=sa
spring.datasource.password=root
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

### Mybatis Configurations ###
mybatis.type-aliases-package=com.mycom.myproducts.mywebsite.config.bean
mybatis.type-handlers-package=org.apache.ibatis.type.EnumOrdinalTypeHandler
mybatis.mapperLocations=classpath:mybatis/mapper/**/*.xml
mybatis.configuration.default-fetch-size=100
mybatis.configuration.default-statement-timeout=30

问题是mybatis无法映射我的枚举类型和错误显示

Caused by: org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'gender' from result set.  
Cause: java.lang.IllegalArgumentException: No enum constant com.mycom.myproducts.mywebsite.config.bean.config.UserBean.Gender.0

这可以通过mybatis-config.xml

修复
    <typeHandlers>
       <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="com.mycom.myproducts.mywebsite.config.bean.config.UserBean$Gender"/>
    </typeHandlers>

但我不知道如何通过application.properties文件来完成?

2 个答案:

答案 0 :(得分:1)

尝试一下

  package com.example.typehandler;
@MappedTypes({Gender.class})
公共类GenderTypeHandler扩展了EnumOrdinalTypeHandler {}
 

  mybatis.type-handlers-package = com.example.typehandler
 

  @Select(...)
    @Results(值= {
             @Result(property =“ gender”,column =“ gender”,typeHandler =“ com.example.typehandler.Gender”),
             ...
 

如果使用 @MappedTypes ,则 @Result 中的 typeHandler 可能是不必要的。

答案 1 :(得分:0)

您需要直接指定包而不是TypeHandler类。

所以你可以将它作为下一个使用:

mybatis.type-handlers-package=org.apache.ibatis.type

手册页说 type-handlers-package 获取包以搜索类型别名。

  

type-handlers-package 用于搜索类型处理程序的包。 (包   分隔符是“,; \ t \ n”)