注册

mybatis如何映射DM8的自定义数组类型

署前街少年(不砍pdd) 2023/08/03 769 2

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:[{"版本信息":"DM Database Server 64 V8"},{"版本信息":"DB Version: 0x7000c"},{"版本信息":"08134283904-20220804-166351-20005"}]
【操作系统】:windows x86 64
【CPU】:
【问题描述】*:使用DM8自定义的数组类型后,查询时后端如何映射,使用的是mybatis框架

数据库建表语句如下:
image.png

mybatis xml文件如下:
image.png

自定义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; } }

全局配置类如下:
image.png

controller和mapper接口如下:
image.png

实体类如下:
image.png

目前报错日志如下:
image.png

回答 0
暂无回答
扫一扫
联系客服