mybatis 自定义TypeHandler数组映射处理器 (pgsql text[]与java String[]映射)

Posted Hepburn Yang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis 自定义TypeHandler数组映射处理器 (pgsql text[]与java String[]映射)相关的知识,希望对你有一定的参考价值。

自定义 ArrayTypeHandler

public class ArrayTypeHandler extends BaseTypeHandler<Object[]> 

    private static final String TYPE_NAME_VARCHAR = "varchar";
    private static final String TYPE_NAME_INTEGER = "integer";
    private static final String TYPE_NAME_BOOLEAN = "boolean";
    private static final String TYPE_NAME_NUMERIC = "numeric";

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Object[] parameter, JdbcType jdbcType) throws SQLException 
        String typeName = null;
        if (parameter instanceof Integer[]) 
            typeName = TYPE_NAME_INTEGER;
         else if (parameter instanceof String[]) 
            typeName = TYPE_NAME_VARCHAR;
         else if (parameter instanceof Boolean[]) 
            typeName = TYPE_NAME_BOOLEAN;
         else if (parameter instanceof Double[]) 
            typeName = TYPE_NAME_NUMERIC;
        

        if (typeName == null) 
            throw new TypeException("ArrayTypeHandler parameter typeName error, your type is " + parameter.getClass().getName());
        

        // 关键的代码,创建Array,然后ps.setArray(i, array)就可以了
        Connection conn = ps.getConnection();
        Array array = conn.createArrayOf(typeName, parameter);
        ps.setArray(i, array);

    
    @Override
    public Object[] getNullableResult(ResultSet resultSet, String s) throws SQLException 
        return getArray(resultSet.getArray(s));
    

    @Override
    public Object[] getNullableResult(ResultSet resultSet, int i) throws SQLException 
        return getArray(resultSet.getArray(i));
    

    @Override
    public Object[] getNullableResult(CallableStatement callableStatement, int i) throws SQLException 
        return getArray(callableStatement.getArray(i));
    


    private Object[] getArray(Array array) 
        if (array == null) 
            return null;
        
        try 
            return (Object[]) array.getArray();
         catch (Exception e) 
        
        return null;
    

配置使用:
在mybatis.cfg.xml文件中添加配置项信息

<configuration>

        <typeHandlers>
            <typeHandler jdbcType="String[]" javaType="text[]"
                         handler="momenta.hdmap.antbear.common.handler.ArrayTypeHandler"/>
            <typeHandler jdbcType="OTHER"
                         handler="momenta.hdmap.antbear.common.handler.GeometryTypeHandler"/>
        </typeHandlers>

</configuration>

以上是关于mybatis 自定义TypeHandler数组映射处理器 (pgsql text[]与java String[]映射)的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis自定义TypeHandler实现数据库Json数组转List<T>对象

Mybatis自定义TypeHandler实现数据库Json数组转List<T>对象

Mybatis映射器

mybatis中typeHandler自定义实现json的读写

MyBatis使用自定义TypeHandler转换类型

MyBatis - 如何在 mybatis xml mapper 文件中定义数组