mybatis对枚举的支持

mybatis对枚举类型提供了两种类型支持:

  • org.apache.ibatis.type.EnumTypeHandler
  • org.apache.ibatis.type.EnumOrdinalTypeHandler

EnumTypeHandler

EnumTypeHandler是mybatis默认的枚举类型转换器,如果pojo类中使用了枚举类型,而配置文件没有指定类型转换类,mybatis将使用EnumTypeHandler处理枚举属性。EnumTypeHandler的将把枚举类的name进行存储,枚举类的name即枚举类名。

EnumOrdinalTypeHandler

EnumOrdinalTypeHandler是mybatis提供的另一种转换器,顾名思义这个转换类使用了枚举类的ordinal属性作为数据库存储信息,由于ordinal属性是int类型的,按照官网的说明数据库中对应资源应该是int或double类型的,但是个人测试过程中MYSQL的varchar字段也可以存储。

总结:

EnumTypeHandler和EnumOrdinalTypeHandler的区别主要是数据库中存储字段的类型差别,由于EnumOrdinalTypeHandler使用枚举类型的ordinal作为存储,所以必须使用数字类型字段存储。

建表语句如下:


CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(100) DEFAULT NULL,
  `password` varchar(100) DEFAULT NULL,
  `salt` varchar(100) DEFAULT NULL,
  `locked` tinyint(1) DEFAULT '0',
  `gender` varchar(20) DEFAULT '0',
  `idNumber` varchar(45) DEFAULT NULL,
  `email` varchar(45) DEFAULT NULL,
  `realname` varchar(45) DEFAULT NULL,
  `mobile` varchar(45) DEFAULT NULL,
  `grade` int(11) DEFAULT NULL,    #用的是int类型
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_sys_users_username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=137 DEFAULT CHARSET=utf8;

映射文件如下:


    <resultMap id="BaseResultMap" type="cn.liuyiyou.yiadmin.domain.User">
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="username" property="username" jdbcType="VARCHAR" />
        <result column="password" property="password" jdbcType="VARCHAR" />
        <result column="salt" property="salt" jdbcType="VARCHAR" />
        <result column="locked" property="locked" jdbcType="BIT" />
        <!--使用枚举类型-->
        <result column="gender" jdbcType="VARCHAR" property="gender"
            typeHandler="org.apache.ibatis.type.EnumTypeHandler" />
        <!--使用枚举类型-->
        <result column="grade" jdbcType="VARCHAR" property="grade"
            typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"></result>
        <result column="idNumber" property="idNumber" jdbcType="VARCHAR" />
        <result column="email" property="email" jdbcType="VARCHAR" />
        <result column="realname" property="realname" jdbcType="VARCHAR" />
        <result column="mobile" property="mobile" jdbcType="VARCHAR" />
    </resultMap>


    <insert id="insert" parameterType="cn.liuyiyou.yiadmin.domain.User">
        insert into user (id,
        username, password,
        salt, locked, gender,grade, idNumber,
        email, realname,
        mobile
        )
        values (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR},
        #{password,jdbcType=VARCHAR},
        #{salt,jdbcType=VARCHAR},
        #{locked,jdbcType=BIT}, #{gender,jdbcType=VARCHAR},
        <!--使用枚举类型,存储的是code-->
        #{grade,typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler},
        #{idNumber,jdbcType=VARCHAR},
        #{email,jdbcType=VARCHAR},
        #{realname,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR}
        )
    </insert>

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容