介绍
这篇文章给大家介绍枚举如何在MyBatis中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
具体方法如下:
& lt; typeHandlers> & lt; typeHandler处理程序=皁rg.apache.ibatis.type.EnumOrdinalTypeHandler"将javaType=癱om.example.entity.enums.ComputerState"/比; & lt;/typeHandlers>
以上的两种转换器都不能满足我们的需求,所以看起来要自己编写一个转换器了。
MyBatis提供了<代码> org.apache.ibatis.type.BaseTypeHandler> 代码类用于我们自己扩展类型转换器,上面的EnumTypeHandler和EnumOrdinalTypeHandler也都实现了这个接口。
<强> 1。定义接口
强>
我们需要一个接口来确定某部分枚举类的行为。如下:
公共接口BaseCodeEnum { int getCode (); }
该接口只有一个返回编码的方法,返回值将被存入数据库。
<强> 2。改造枚举
强>
就拿上面的ComputerState来实现BaseCodeEnum接口:
公共类CodeEnumUtil { 公共静态& lt; E Enum<延伸,# 63;比;,BaseCodeEnum>均得到E (ClassenumClass, int代码){ E [] enumConstants=enumClass.getEnumConstants (); (E E: enumConstants) { 如果(e.getCode()==代码) 返回e; } 返回null; } }
<>强4。自定义类型转换器
强>
准备工作做的差不多了,是时候开始编写转换器了。
<代码> BaseTypeHandler
- <李> <代码>空白setNonNullParameter (PreparedStatement ps, int i T参数,JdbcType JdbcType) 代码>
,用于定义设置参数时,该如何把Java类型的参数转换为对应的数据库类型李> <李> <代码> T getNullableResult (ResultSet rs,字符串columnName) 代码>
,用于定义通过字段名称获取字段数据时,如何把数据库类型转换为对应的Java类型李> <李> <代码> T getNullableResult (ResultSet rs, int columnIndex) 代码>
,用于定义通过字段索引获取字段数据时,如何把数据库类型转换为对应的Java类型李> <李> <代码> T getNullableResult (CallableStatement cs, int columnIndex) 代码>
,用定义调用存储过程后,如何把数据库类型转换为对应的Java类型
李,>
我是这样实现的:
公共类CodeEnumTypeHandler扩展BaseTypeHandler { 私人Class 类型; 公共CodeEnumTypeHandler (Class 类型){ 如果(type==null) { 把新IllegalArgumentException(“不能null"类型参数); } 这一点。类型=类型; } @Override 公共空间setNonNullParameter (PreparedStatement ps, int i, BaseCodeEnum参数,JdbcType JdbcType) 抛出SQLException { ps.setInt(我,parameter.getCode ()); } @Override 公共E getNullableResult (ResultSet rs、字符串columnName) throws SQLException { int i=rs.getInt (columnName); 如果(rs.wasNull ()) { 返回null; 其他}{ 尝试{ CodeEnumUtil返回。均得到(类型、我); }捕捉(例外的前女友){ 把新的IllegalArgumentException(“不能把“;+我+“;“;+ type.getSimpleName () +“;由序数价值!” 例); } } } @Override 公共E getNullableResult (ResultSet rs, int columnIndex) throws SQLException { int i=rs.getInt (columnIndex); 如果(rs.wasNull ()) { 返回null; 其他}{ 尝试{ CodeEnumUtil返回。均得到(类型、我); }捕捉(例外的前女友){ 把新的IllegalArgumentException(“不能把“;+我+“;“;+ type.getSimpleName () +“;由序数价值!” 例); } } } @Override 公共E getNullableResult (CallableStatement cs, int columnIndex) throws SQLException { int i=cs.getInt (columnIndex); 如果(cs.wasNull ()) { 返回null; 其他}{ 尝试{ CodeEnumUtil返回。均得到(类型、我); }捕捉(例外的前女友){ 把新的IllegalArgumentException(“不能把“;+我+“;“;+ type.getSimpleName () +“;由序数价值!” 例); } } } } 枚举如何在MyBatis中使用