zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    梦想就是梦想,不要让它成为杯具
    程序员,离开了库你还能干什么?
    采用WPF框架编写的3D软渲染Demo
    what the hell with Gimbal Lock?
    FX Composer VS RenderMonkey 使用对比之 FX Composer篇
    为什么你应该使用OpenGL而不是DirectX?
    游戏中的夜视效果实现
    {转}深入浅出之正则表达式(一)
    正则表达式30分钟入门教程版本:v2.31 (2009411) 作者:deerchao 转载请注明来源
    2013年
  • 原文地址:https://www.cnblogs.com/ooo0/p/10914149.html
Copyright © 2011-2022 走看看