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. (66)Wangdao.com第十一天_JavaScript 数组Array

    数组 Array 本质上,数组属于一种特殊的对象.typeof 运算符会返回数组的类型是 object 数组的特殊性体现在,它的键名是按次序排列的一组整数(0,1,2...) // Object.ke ...

  2. priority_queue和sort应用

    #include"iostream" #include"String" #include"stdio.h" #include "s ...

  3. Nginx配置:nginx如何配置跳转fpm

    location ~ \.php(.*)$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_inf ...

  4. Java项目中启动Tomcat报错invalid LOC header

    原因: 可能是jar包有问题. 解决方法: 1.找到加载不了的类对应的jar包. 2.在tomcat中webapps/INF/lib中找到对应的jar包,然后删除. 3.重新下载其它版本的jar包. ...

  5. 外网访问VMware虚拟机

      目的: 主机上安装了VMware,VMware上安装了Linux虚拟机(我安装的是Centos7).我想让虚拟机向外提供Web服务.本文记录如何让我的主机和外网用户可以访问VM虚拟机上的Web. ...

  6. WcPro项目(WordCount优化)

    1 基本任务:代码编写+单元测试 1.1 项目GitHub地址 https://github.com/ReWr1te/WcPro 1.2 项目PSP表格 PSP2.1 PSP阶段 预估耗时(分钟) 实 ...

  7. 手写AVL 树(下)

    上一篇 手写AVL树上实现了AVL树的插入和查询 上代码: 头文件:AVL.h #include <iostream> template<typename T1,typename T ...

  8. iview select filterable属性使用下拉小bug

    今天做项目时候在iview 原生自带的select中设置filterable,下拉时候可进行查询,但是发现选中载打开模态框每次都绑定上一次的值,解决方案就是在关闭弹框时候将this.$refs.sto ...

  9. workerman 安装event 扩展

    2018年7月31日10:07:47 一些小技巧 命令行直接运行PHP代码 php -r "phpinfo();" 交互模式运行PHP php -a PHP脚本作为shell脚本运 ...

  10. JDK安装路径下的JRE与独立安装的JRE区别

    在JDK安装目录下的子文件下,已经默认安装了一个jre.且与独立安装的JRE6所包含的文件几乎完全一样. JDK里面内置的JRE和独立的JRE是有一点差别的: 在JDK安装文件中包含了一个完整的独立版 ...