今天朋友遇到这么一个问题:使用Mybatis进行Enum类型数据读取的时候,出现了异常。报错:找不到此枚举类型。我之前正好使用过mybatis 保存枚举类型的经验。
之前我用mybatis保存项目中的枚举类型的值,保存到数据库中是以字符串形式的,而朋友保存的是枚举类型,导致出现了异常。为什么使用字符串就可以呢?我也是百思不得其解。后来查资料结合阅读源码,总算明白了。
mybatis对于Enum类型的处理,有默认的类型转换器。以下为转载:
MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,Java对象将通过ps.setInt、ps.setString、ps.setTimeStamp等方法转换成数据库需要的数据
在从结果集(ResultSet)中取出一个值时,将使用rs.getInt、rs.getString、rs.getTimeStamp等方法将数据转换为Java对象
这两类操作通过 类型处理器 完成
-
类型处理器均实现
TypeHandler<T>
接口,所有基本类型均有对应的类型处理器 -
Enum对应有两个类型处理器,分别为
EnumTypeHandler
、EnumOrdinalTypeHandler
若需将Enum字段映射为字符串,则使用
EnumTypeHandler
。 (默认使用)若需将Enum字段映射为int数值,则使用
EnumOrdinalTypeHandler