mybatis优雅处理枚举类
- 前言
- 出现的问题:
- 问题解决
- EnumOrdinalTypeHandler
- 使用EnumOrdinalTypeHandler
- 测试
- 注意的点:
- 总结
- 后续文章链接
前言
前两篇文章将和前段对接的问题处理了。
现在就到了本文的重头戏,枚举类如何优雅入库
本人在项目中使用的mybatis 3.5.9,其他版本应该影响不大
为了方便测试,当前枚举类中的值已初始化为
DISABLE(0,"禁用"),//ordinal=0
ENABLE(1,"启用");//ordinal=1
出现的问题:
首个问题:是查询的时候,如果要查询枚举类的字段的值,传递枚举值时,会直接传递枚举值的名称,这样自然是查不到数据的
第二个问题:是mybatis封装结果集的时候,无法处理常量类型的枚举类
问题解决
这时候考虑到要用mybatis的类型处理类,也就是TypeHandler来处理了
不过查看mybatis的配置项,可以看到有这个一个内容
原来mybatis是有做枚举类型的数据处理的
进到源码中看
可以看到源码中对枚举类的处理方式是原值处理
EnumOrdinalTypeHandler
再翻看mybatis中的类型处理类,发现有这么一个类
org.apache.ibatis.type.EnumOrdinalTypeHandler
EnumOrdinal?,枚举排序值?
也就是说mybatis也提供了,根据排序值处理枚举类型的转换器
使用EnumOrdinalTypeHandler
先不管这么多,用上再说,mybatis-plus配置项需要注意一下
测试
可以看到值已经正常封装进preparedStatement中了
注意的点:
mybatis只对preparedStatement调用typeHandler,如果是使用${ }设置sql参数,那么就不会走该处理器
值传递考虑此方式处理
总结
mybatis提供了org.apache.ibatis.type.EnumOrdinalTypeHandler 处理枚举类型的数据
如果在开发中,能强制所有枚举常量按序排列,并且值和odinal一致的,问题就已经解决了
后续文章链接