package com.cainiao.aeye.chdir.manager.tddl.Handler;

import com.cainiao.aeye.chdir.core.enums.AudioFormatEnum;import org.apache.commons.lang3.StringUtils;import org.apache.ibatis.type.BaseTypeHandler;import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;

/** * @Auther:wb-fem407232 */public class EnumAudioFormatHandler extends BaseTypeHandler<AudioFormatEnum> {    private final AudioFormatEnum[] enums;    private Class<AudioFormatEnum> type;

    /**     * 设置配置文件设置的转换类以及枚举类内容,供其他方法更便捷高效的实现     *     * @param type 配置文件中设置的转换类     */    public EnumAudioFormatHandler(Class<AudioFormatEnum> type) {        if (type == null) {            throw new IllegalArgumentException("Type argument cannot be null");        }        this.type = type;        this.enums = type.getEnumConstants();        if (this.enums == null) {            throw new IllegalArgumentException(type.getSimpleName()                    + " does not represent an enum type.");        }    }

    @Override    public void setNonNullParameter(PreparedStatement preparedStatement, int i, AudioFormatEnum audioFormatEnum, JdbcType jdbcType) throws SQLException {        preparedStatement.setString(i, audioFormatEnum.name());    }

    @Override    public AudioFormatEnum getNullableResult(ResultSet resultSet, String s) throws SQLException {        String name = resultSet.getString(s);        if (resultSet.wasNull()) {            return null;        } else {            return locateEnumStatus(name);        }    }

    @Override    public AudioFormatEnum getNullableResult(ResultSet resultSet, int i) throws SQLException {        String name = resultSet.getString(i);        if (resultSet.wasNull()) {            return null;        } else {            return locateEnumStatus(name);        }    }

    @Override    public AudioFormatEnum getNullableResult(CallableStatement callableStatement, int i) throws SQLException {        String name = callableStatement.getString(i);        if (callableStatement.wasNull()) {            return null;        } else {            return locateEnumStatus(name);        }    }

    /**     * 枚举类型转换,由于构造函数获取了枚举的子类enums,让遍历更加高效快捷     *     * @param name 数据库中存储的自定义code属性     * @return code对应的枚举类     */    private AudioFormatEnum locateEnumStatus(String name) {        if(StringUtils.isBlank(name)){            return null;        }        for (AudioFormatEnum status : enums) {            if (status.name().equals(name)) {                return status;            }        }        throw new IllegalArgumentException("未知的枚举类型:" + name + ",请核对" + type.getSimpleName());    }}

typeHandler的更多相关文章

  1. 深入浅出Mybatis系列(五)---TypeHandler简介及配置(mybatis源码篇)

    上篇文章<深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)>为大家介绍了mybatis中别名的使用,以及其源码.本篇将为大家介绍TypeH ...

  2. mybatis 3的TypeHandler解析(null值的处理)

    最近,在测试迁移公司的交易客户端连接到自主研发的中间件时,调用DAO层时,发现有些参数并没有传递,而在mapper里面是通过parameterMap传递的,因为有些参数为null,这就导致了参数传递到 ...

  3. MyBatis自定义数据映射TypeHandler

    从网上看到的帖子,感觉内容非常好,拷过来的(不愿意转载,不然被作者删除了,这么好的帖子就看不到了). 原文:http://my.oschina.net/amoshuang/blog/134199 在M ...

  4. Ibatis的类型处理器TypeHandler解析

    Ibatis允许用户像在hibernate中一样定义自己的类型,但是,用户自定义类型需要与数据库中的字段类型进行对应.它的处理方法是允许我们扩展TypeHandler.Ibatis框架在处理该数据类型 ...

  5. TypeHandler的简单实例

    转自:http://ccchhhlll1988-163-com.iteye.com/blog/1420149 TypeHandler是MyBatis config文件中可选的配置选项,其可以对实体属性 ...

  6. IBATIS处理typeHandler类容易范的SQLException总结

    1. java.sql.SQLException: 无效的列类型 原因: A. ibatis的IN,OUT参数.或者typeHandler类中传入的参数值数据类型与Oracle自定义对象中的属性值的数 ...

  7. Mybatis实战之自定义TypeHandler处理枚举

    在Mybatis中,处理枚举类的TypeHandler有两个: EnumTypeHandler: 用于保存枚举名 EnumOrdinalTypeHandler: 用于保存枚举的序号. 在实际项目中,以 ...

  8. Mybatis实战之TypeHandler高级进阶

    上篇文章分享了在项目实战中自定义Mybatis的TypeHandler来处理枚举类型.文章结尾也指出了美中不足之处,那就是每次都需要指定我们自定义的枚举TypeHandler. 随着项目枚举类型的增多 ...

  9. mybatis基础,mybatis配置文件核心组件typeHandler元素

    无论是从预处理语句中设置一个值,还是从结果集里取出一个值,都会用类型处理器将获取的值以合适的方式转换成 Java 类型 可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型 实现 o ...

  10. MyBatis之TypeHandler

    在大学写web应用的时候经常会遇到这么个问题,当我要插入一条数据,某个数据是Date类型,数据库中却是VARCHAR类型,这个时候可能会傻乎乎的先把这个数据自己手动转换成String类型再插入到数据库 ...

随机推荐

  1. CSS3_元素拖曳原理_设置全局点击捕获_九宫格碰撞检测_自定义滚动条

    拖曳原理: 元素的初始位置 + 鼠标距离差 = 元素最终位置 使元素可以拖动 function dragElement(obj){ obj.onmousedown = function(e){ e = ...

  2. (97)Wangdao.com_第三十天_触摸事件

    触摸事件 只有触摸屏才会引发这一类事件 触摸事件 和 鼠标事件 同时触发,即使这个时候并没有用到鼠标. 这是为了让那些只定义鼠标事件.没有定义触摸事件的代码,在触摸屏的情况下仍然能用. 如果想避免这种 ...

  3. linux命令技巧

    printf "%-5s %-10s %-4s\n" No Name Mark printf "%-5s %-10s %-4.2f\n" 1 Sarath 80 ...

  4. ELK之使用packetbeat分析网络包流量

    介绍 packbeat是一个开源的实时网络抓包与分析框架,内置了很多常见的协议捕获及解析,如HTTP.MySQL.Redis等.在实际使用中,通常和Elasticsearch以及kibana联合使用, ...

  5. js 中数组的遍历

    var x = ['a','b','c'] x.forEach(function(val,k){ console.log(val + '--' +k); }) a--0 b-- 1 c-- 2 var ...

  6. 如何print 输出不换行(2 和 3 处理方式 不一样)

    2.7    正常情况下print输出的时候会自动进行换行处理,我们肯定有时候会有输出不换行的需求, 下面开始介绍如何不换行输出: 例子: print("hello world") ...

  7. [strongswan] strongswan METHOD宏

    使用METHOD宏的函数定义: METHOD(message_t, get_message_id, uint32_t, private_message_t *this) { return this-& ...

  8. Elasticsearch学习笔记(十一)Mapping原理

    一.Mapping的功能作用 Mapping是定义如何存储和索引一个document及其所包含字段的过程. Mapping是index和type的元数据,每个type都有自己的一个mapping,决定 ...

  9. thinkphp ckeditor与ckfinder

    thinkphp ckeditor与ckfinder 下载 ckeditor下载地址 ckfinder下载地址 整合 将ckeditor与findeditor下载完成后,放到public目录下,配置c ...

  10. java中 16进制字符串 与普通字符串 与 byte数组 之间的转化

    方法依赖commons-codec包  maven的引入方式如下 <dependency> <groupId>commons-codec</groupId> < ...