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. 学习《html5 in action》

    第二章:表单代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  2. [LeetCode] Search in a Sorted Array of Unknown Size 在未知大小的有序数组中搜索

    Given an integer array sorted in ascending order, write a function to search target in nums.  If tar ...

  3. JS-预解析(提升)与代码执行过程

    1,预解析的过程. 2,代码的执行过程. 预解析:程序在执行过程,会先将代码读取到内存中检查,会将所有的声明在此处进行标记,所谓的标记就是让js解析器知道这个名字,后面在使用这个名字的时候,不会出现未 ...

  4. ubuntu16.04中supervisor安装与简单使用(转载)

    ubuntu16.04中supervisor安装与简单使用 supervisor 进程管理是可以让进程在后台运行,而不占用控制台影响使用 1. 安装 supervisor sudo apt insta ...

  5. VIm快捷操作

    vim快捷操作 移动 行级移动 $ 行尾 0 行头 段级移动 { 段首 } 段尾 屏幕级别 L: 屏幕尾部 H: 屏幕头部 文档级别 G: 文档尾部 1G:头部 nG:文档n行 删除 dd: 删除当前 ...

  6. Python Learning - Two

    1.  Built-in Modules and Functions 1) Function def greeting(name): print("Hello,", name) g ...

  7. css学习_css3过渡

    1.css3过渡 注意:记住多属性设置的方式:若把过渡写在了hover里面的话鼠标移走时不会有过渡效果!:不同属性同时变时用  all 就可以实现了. 2.css3  transform属性 1.移动 ...

  8. Weex开发中的应用小笔记

    内容: 获取输入或其他操作使得值一直改变并在一段不改变的时间后执行下一步操作(输入搜索关键字并执行搜索) https://vuejs.org/v2/guide/computed.html?spm=a2 ...

  9. js获取HTML DOM节点元素方法总结

    1. 通过顶层document节点获取:    (1)document.getElementById(elementId) :通过ID获得节点,如果页面上含有多个相同id的节点,那么只返回第一个节点. ...

  10. COMP9334 Project

    COMP9334 Project, Term 1, 2019:Fog/cloud ComputingVersion 1.0Due Date: 11:00pm Friday 26 April 2019. ...