美文网首页
mybatis对枚举的支持

mybatis对枚举的支持

作者: liuyiyou | 来源:发表于2017-11-24 16:31 被阅读0次

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>

相关文章

网友评论

      本文标题:mybatis对枚举的支持

      本文链接:https://www.haomeiwen.com/subject/xvjfbxtx.html