公共父类 import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import java.sql.*; public abstract class ArrayTypeHandler<T> extends BaseTypeHandler<T> { @Override public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException { Connection connection = ps.getConnection(); Array array = connection.createArrayOf(getTypeName(), (Object[]) parameter); ps.setArray(i, array); } @Override public T getNullableResult(ResultSet rs, String columnName) throws SQLException { return getArray(rs.getArray(columnName)); } @Override public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException { return getArray(rs.getArray(columnIndex)); } @Override public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { return getArray(cs.getArray(columnIndex)); } protected abstract String getTypeName(); private T getArray(Array array) throws SQLException { if(array == null){ return null; } return (T) array.getArray(); } }
Long数组
import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedJdbcTypes; import org.apache.ibatis.type.MappedTypes; @MappedTypes({Long[].class}) @MappedJdbcTypes({JdbcType.ARRAY}) public class LongArrayTypeHandler extends ArrayTypeHandler<Long[]> { private static final String TYPE_INTEGER = "integer"; @Override protected String getTypeName() { return TYPE_INTEGER; } }
String数组
import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedJdbcTypes; import org.apache.ibatis.type.MappedTypes; @MappedTypes({String[].class}) @MappedJdbcTypes({JdbcType.ARRAY}) public class StringArrayTypeHandler extends ArrayTypeHandler<String[]> { private static final String TYPE_VARCHAR = "varchar"; @Override protected String getTypeName() { return TYPE_VARCHAR; } }