zoukankan      html  css  js  c++  java
  • mybatis枚举类型自定义处理类

     类都在包 default下创建

    1、先定义一个接口类

    public interface BaseEnum {
    
        public String getValue();
    
        public String getName();
        
    }

    2、让一个枚举类型实现这个接口

    public enum EnumTest implements BaseEnum {
        TEST_ONE("test1", "测试一"),
        TEST_TWO("test2", "测试二");
    
        private EnumTest(String value, String name) {
            this.name = name;
            this.value = value;
        }
        
        private String name;
        
        private String value;
        
        @Override
        public String getName() {
            return this.name;
        }
    
        @Override
        public String getValue() {
            return this.value;
        }
    
        public static EnumTest enumValueOf(String value) {
            EnumTest[] values = EnumTest .values();
            for (EnumTest test : values) {
                if (value.equalsIgnoreCase(test.getValue())) {
                    return test;
                }
            }
            
            return null;
        }
    
    }

    3、创建mybatis枚举类型处理类

    public class BaseEnumTypeHandler<E extends BaseEnum> extends BaseTypeHandler<E> {
    
        private final Class<E> type;
    
        public BaseEnumTypeHandler(Class<E> type) {
            if (type == null) {
                throw new IllegalArgumentException("Type argument cannot be null");
            }
            this.type = type;
        }
    
        @Override
        public void setNonNullParameter(PreparedStatement ps, int i, E parameter, JdbcType jdbcType) throws SQLException {
            ps.setString(i, parameter.getValue());
        }
    
        
        @Override
        public E getNullableResult(ResultSet rs, String columnName) throws SQLException {
            String s = rs.getString(columnName);
            BaseEnum[] baseEnumArr = this.type.getEnumConstants();
            E baseEnum = valueOfString(baseEnumArr, s);
            return baseEnum;
        }
    
        @Override
        public E getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
            String s = rs.getString(columnIndex);
            BaseEnum[] baseEnumArr = this.type.getEnumConstants();
            E baseEnum = valueOfString(baseEnumArr, s);
            return baseEnum;
        }
        
        @Override
        public E getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
            String s = cs.getString(columnIndex);
            BaseEnum[] baseEnumArr = this.type.getEnumConstants();
            E baseEnum = valueOfString(baseEnumArr, s);
            return baseEnum;
        }
        
        @SuppressWarnings("unchecked")
        private E valueOfString(BaseEnum[] baseEnumArr, String value) {
            if (baseEnumArr == null || StringUtils.isBlank(value)) {
                return null;
            }
            
            for (BaseEnum baseEnum : baseEnumArr) {
                if (value.equalsIgnoreCase(baseEnum.getValue())) {
                    return (E) baseEnum;
                }
            }
            
            return null;
        }
    
    }

    4、在mybatis配制文件mybatis.cfg.xml里添加一个配制

    <typeHandlers>
            <typeHandler handler="BaseEnumTypeHandler" javaType="EnumTest"/>
        </typeHandlers>
  • 相关阅读:
    深度学习优化方法比较
    调参
    Numpy/Pytorch之数据类型与强制转换
    numpy:维度问题
    js模板引擎-juicer
    js模板引擎-腾讯artTemplate 简洁语法例子
    canva绘制时钟
    js中的break ,continue, return
    JavaScript奇技淫巧44招
    数据类型
  • 原文地址:https://www.cnblogs.com/xtly2012/p/9111197.html
Copyright © 2011-2022 走看看