枚举 enum

当使用枚举时,需要使用EnumTypeHandler或者EnumOrdinalTypeHandler作为映射类型,或者自己实现处理器。

<!-- mybatis-config.xml -->
<typeHandlers>
<typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="java.math.RoundingMode"/>
</typeHandlers>

需要注意的是EnumOrdinalTypeHandler只能处理特定的类型,当我们需要使用真正意义上的枚举,需要使用EnumTypeHandler或者自己实现。
实际上,对于增删改查都需要这么处理。

<resultMap type="org.apache.ibatis.submitted.rounding.User" id="usermap2">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="funkyNumber" property="funkyNumber"/>
<result column="roundingMode" property="roundingMode" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
</resultMap>
<select id="getUser2" resultMap="usermap2">
select * from users2
</select>
<insert id="insert2" parameterType="org.apache.ibatis.submitted.rounding.User">
insert into users2 (id, name, funkyNumber, roundingMode) values (
#{id}, #{name}, #{funkyNumber}, #{roundingMode, typeHandler=org.apache.ibatis.type.EnumTypeHandler}
)
</insert>

当然,mybatis默认已经指定了枚举处理器就是EnumTypeHandler,所以可以不予配置。只要类型设置成了enum。


再看EnumTypeHandler的实现,
当从数据读取值的时候
是通过Enum.valueOf来解析的,这是一种全字匹配的实现方式。

String s = cs.getString(columnIndex);
return s == null ? null : Enum.valueOf(type, s);

如假设
public enum Enum1 {
ONE, TWO, THREE;
}
那么只有当cs.getString(columnIndex); = ONE的时候,才能获取到枚举值ONE;

设置值的时候
ps.setString(i, parameter.toString());

通过toString来处理。

还需要注意的是
EnumTypeHandler
Enumeration类型
VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值