mybatis 支持枚举

匿名 (未验证) 提交于 2019-12-03 00:21:02

mybatis对枚举类型提供了两种类型支持:EnumTypeHandler和EnumOrdinalTypeHandler。
1、EnumTypeHandler
是mybatis默认的枚举类型转换器,如果pojo类中使用了枚举类型,而配置文件没有指定类型转换类,mybatis将使用EnumTypeHandler处理枚举属性。EnumTypeHandler的将把枚举类的name进行存储,枚举类的name即枚举类名。

2、EnumOrdinalTypeHandler
是mybatis提供的另一种转换器,顾名思义这个转换类使用了枚举类的ordinal属性(索引位置,从0开始)作为数据库存储信息,由于ordinal属性是int类型的,按照官网的说明数据库中对应资源应该是int或double类型的

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

示例:

建表语句 CREATE TABLE `t_user` (   `id` varchar(45) NOT NULL,   `accountID` varchar(45) DEFAULT NULL,   `userName` varchar(45) DEFAULT NULL,   `statusDef` varchar(45) DEFAULT NULL,   `statusOrdinal` varchar(45) DEFAULT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表'; 实体类 package com.sg.bean;  public class User {      private String id;      private String accountID;      private String userName;      private EnumStatus statusDef; //枚举属性,使用mybatis默认转换类      private EnumStatus statusOrdinal; //枚举属性,使用EnumOrdinalTypeHandler转换      public String getId() {         return id;     }      public void setId(String id) {         this.id = id;     }      public String getAccountID() {         return accountID;     }      public void setAccountID(String accountID) {         this.accountID = accountID;     }      public String getUserName() {         return userName;     }      public void setUserName(String userName) {         this.userName = userName;     }      public EnumStatus getStatusDef() {         return statusDef;     }      public void setStatusDef(EnumStatus statusDef) {         this.statusDef = statusDef;     }      public EnumStatus getStatusOrdinal() {         return statusOrdinal;     }      public void setStatusOrdinal(EnumStatus statusOrdinal) {         this.statusOrdinal = statusOrdinal;     }      @Override     public String toString() {         return "id:" + id + "\naccountID:" + accountID + "\nuserName:" + userName + "\nstatusDef:" + statusDef.getDescription() + "\nstatusOrdinal:" + statusOrdinal.getDescription();     } } 枚举类 package com.sg.bean;  public enum EnumStatus {     NORMAL(1, "正常"),     DELETE(0, "删除"),     CANCEL(2, "注销");      private EnumStatus(int code, String description) {         this.code = new Integer(code);         this.description = description;     }     private Integer code;      private String description;      public Integer getCode() {          return code;     }      public String getDescription() {          return description;     } } mybatis配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.sg.bean.User">    <resultMap type="User" id="userMap">     <id column="id" property="id"/>     <result column="accountID" property="accountID"/>     <result column="userName" property="userName"/>     <result column="statusDef" property="statusDef"/>     <result column="statusOrdinal" property="statusOrdinal" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>   </resultMap>    <select id="selectUser" resultMap="userMap">     select * from t_user where id = #{id}   </select>    <insert id="insertUser" parameterType="User">       insert into t_user(id,accountID,userName,statusDef,statusOrdinal)       values(       #{id}, #{accountID}, #{userName},       #{statusDef},       #{statusOrdinal, typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler}       )   </insert> </mapper>

注意配置文件中,statusDef没有配置转换类,它将使用mybatis默认的转换类EnumTypeHandler。

文章来源: mybatis 支持枚举
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!