• 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

  • 相关阅读:
    What's different between Ctrl+Z and Ctrl+C in Unix command line?
    bitbucket使用,经验总结
    SpringMVC 强大的注解方式,走一个流程,看看,这些注解用过么
    java异常处理,需要考虑的流程
    两个日期之间相差的天数
    vue 路由面试题
    promise
    es6面试题
    谈谈你是如何理解 JS 异步编程的,EventLoop、消息队列都是做什么的,什么是宏任务,什么是微任务?
    使用高阶函数实现Array对象的方法
  • 原文地址:https://www.cnblogs.com/ooo0/p/10914149.html
Copyright © 2020-2023  润新知