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>
  • 相关阅读:
    BZOJ1229 USACO2008 Nov toy 玩具 【三分+贪心】*
    BZOJ1304 CQOI2009 叶子的染色 【树形DP】
    BZOJ1131 POI2008 Sta 【树形DP】
    BZOJ1096 ZJOI2007 仓库建设 【斜率优化DP】
    BZOJ4540 Hnoi2016 序列 【莫队+RMQ+单调栈预处理】*
    Codeforces 1012C Hills【DP】*
    POJ1741 Tree + BZOJ1468 Tree 【点分治】
    BZOJ2152 聪聪可可 【点分治】
    HDU1693 Eat the Trees 【插头DP】*
    RUAL1519 Formula 1 【插头DP】
  • 原文地址:https://www.cnblogs.com/xtly2012/p/9111197.html
Copyright © 2011-2022 走看看