Mybatis配置-处理枚举类型(Handling Enums)

发布时间:2023年12月18日

如果您想要映射一个枚举类型,您需要使用EnumTypeHandler或EnumOrdinalTypeHandler中的其中一个。

例如,假设我们需要存储用于对某些数字进行四舍五入的舍入模式。默认情况下,MyBatis使用EnumTypeHandler将枚举值转换为它们的名称。

请注意,EnumTypeHandler在某种意义上是特殊的,与其他处理程序不同,它不仅处理一个特定的类,而是处理任何继承自Enum的类。

然而,我们可能不想存储枚举的名称。我们的数据库管理员可能坚持要使用整数代码。这同样简单:在配置文件的typeHandlers中添加EnumOrdinalTypeHandler,现在每个RoundingMode将使用其序号值映射到一个整数。

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

如果您想在一个地方将相同的枚举映射到字符串形式,在另一个地方映射为整数形式怎么办?

自动映射器将自动使用EnumOrdinalTypeHandler,所以如果我们希望回到使用普通的EnumTypeHandler,我们必须显式设置这些SQL语句要使用的类型处理程序。

<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="org.apache.ibatis.submitted.rounding.Mapper">
    <resultMap type="org.apache.ibatis.submitted.rounding.User" id="usermap">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="funkyNumber" property="funkyNumber"/>
        <result column="roundingMode" property="roundingMode"/>
    </resultMap>

    <select id="getUser" resultMap="usermap">
        select * from users
    </select>
    <insert id="insert">
        insert into users (id, name, funkyNumber, roundingMode) values (
            #{id}, #{name}, #{funkyNumber}, #{roundingMode}
        )
    </insert>

    <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">
        insert into users2 (id, name, funkyNumber, roundingMode) values (
            #{id}, #{name}, #{funkyNumber}, #{roundingMode, typeHandler=org.apache.ibatis.type.EnumTypeHandler}
        )
    </insert>

</mapper>

请注意,这将强制我们在select语句中使用resultMap而不是resultType。

文章来源:https://blog.csdn.net/hay23455/article/details/135062166
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。