• mybatis 枚举typeHandler


    枚举typeHandler

    在绝大多数情况下,typeHandler因为枚举而使用,MyBatis已经定义了两个类作为枚举类型的支持,这两个类分别是:
      •EnumOrdinalTypeHandler。
      •EnumTypeHandler。
    因为它们的作用不大,所以在大部分情况下,我们都不用它们,不过我们还是要稍微了解一下它们的用法。

    EnumOrdinalTypeHandler

    EnumOrdinalTypeHandler是按MyBatis根据枚举数组下标索引的方式进行匹配的,也是枚举类型的默认转换类,它要求数据库返回一个整数作为其下标,它会根据下标找到对应的枚举类型

    EnumTypeHandler

    EnumTypeHandler会把使用的名称转化为对应的枚举,比如它会根据数据库返回的字符串“MALE”,进行Enum.val-ueOf(SexEnum.class,"MALE");转换

    自定义枚举typeHandler

    代码清单4-23:SexEnumTypeHandler

    package com.xc.util.typehandler;
    
    import com.xc.enumerate.SexEnum;
    import org.apache.ibatis.type.JdbcType;
    import org.apache.ibatis.type.MappedJdbcTypes;
    import org.apache.ibatis.type.MappedTypes;
    import org.apache.ibatis.type.TypeHandler;
    
    import java.sql.CallableStatement;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    @MappedTypes(SexEnum.class)
    @MappedJdbcTypes(JdbcType.INTEGER)
    public class SexEnumTypeHandler implements TypeHandler<SexEnum> {
    
        @Override
        public void setParameter(PreparedStatement ps, int i, SexEnum parameter, JdbcType jdbcType) throws SQLException {
            ps.setInt(i, parameter.getId());
        }
    
        @Override
        public SexEnum getResult(ResultSet rs, String columnName) throws SQLException {
            int id = rs.getInt(columnName);
            return SexEnum.getSexById(id);
        }
    
        @Override
        public SexEnum getResult(ResultSet rs, int columnIndex) throws SQLException {
            int id = rs.getInt(columnIndex);
            return SexEnum.getSexById(id);
        }
    
        @Override
        public SexEnum getResult(CallableStatement cs, int columnIndex) throws SQLException {
            int id = cs.getInt(columnIndex);
            return SexEnum.getSexById(id);
        }
    }

    package com.xc.enumerate;
    
    public enum SexEnum {
    
        MALE(1, "男"), FEMALE(0, "女");
        private int id;
        private String name;
    
        SexEnum(int id, String name) {
            this.id = id;
            this.name = name;
        }
    
        public static SexEnum getSexById(int id) {
            for (SexEnum sex : SexEnum.values()) {
                if (sex.getId() == id) {
                    return sex;
                }
            }
            return null;
        }
    
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
    }

    mybatis typeHandler类型转换器

    mybatis 自定义typeHandler

  • 相关阅读:
    IdentityServer4 接口说明
    MQTT中的Retained(保留消息) 与 LWT(最后遗嘱)
    Docker常用命令
    开源服务容错处理库Polly使用文档
    MQTT 主题的高级特性
    MQTT的$SYS主题定义
    RabbitMQ消息队列之Windows下安装和部署
    RabbitMQ多台物理机集群搭建
    Ocelot.json完整配置文件
    nginx.conf文件配置明细详解
  • 原文地址:https://www.cnblogs.com/ooo0/p/10914149.html
Copyright © 2020-2023  润新知