为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:[{"版本信息":"DM Database Server 64 V8"},{"版本信息":"DB Version: 0x7000c"},{"版本信息":"08134283904-20220804-166351-20005"}]
【操作系统】:windows x86 64
【CPU】:
【问题描述】*:使用DM8自定义的数组类型后,查询时后端如何映射,使用的是mybatis框架
数据库建表语句如下:
mybatis xml文件如下:
自定义typeHandler如下:
package com.megvii.code;
import org.apache.ibatis.type.*;
import java.sql.*;
/**
* @Author: java890.com
* @Date: 2021/10/19 14:05
*/
@MappedTypes(value = Integer.class)
@MappedJdbcTypes(value = JdbcType.ARRAY)
public class MyArrayTypeHandler 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 {
System.out.println(resultSet.getString(s));
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;
}
}
全局配置类如下:
controller和mapper接口如下:
实体类如下:
目前报错日志如下:
自定义类型需要使用java.sql.Struct类来接


如下图