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;

映射文件如下:


    
        
        
        
        
        
        
        
        
        
        
        
        
        
    


    
        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},
        
        #{grade,typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler},
        #{idNumber,jdbcType=VARCHAR},
        #{email,jdbcType=VARCHAR},
        #{realname,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR}
        )
    

你可能感兴趣的:(mybatis对枚举的支持)