java mybatis如何操作postgresql array数组类型

网友投稿 459 2022-09-03


java mybatis如何操作postgresql array数组类型

目录我定义了几个基础数据类型的数组java mybatis操作 postgresql array数组类型备忘

找了半天没有找到postgresql中关于array数组类型的字段如何对应到java中的数据类型,后来找到了mybatis的TypeHandler,只要实现一个自定义的TypeHandler就行了,如下,

我定义了几个基础数据类型的数组

public class ArrayTypeHandler extends BaseTypeHandler {

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[]) {

http:// typeName = TYPE_NAME_NUMERIC;

}

if (typeName == null) {

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

}

// 这3行是关键的代码,创建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;

}

}

然后在实体类里面对应的字段配置这个转换器就行,如果是配置文件需要在 xxmap.xml中配置对应属性

@ColumnType(typeHandler = com.mvc.typehandler.ArrayTypeHandler.class)

private String[] cities; //所操作的城市code列表,为空表示所有城市

@ColumnType(typeHandler = com.mvc.typehandler.ArrayTypeHandler.class)

private String[] areaTypes; //操作的行业类型code列表,为空表示所有行业

@ColumnType(typeHandler = com.jmtool.mvc.typehandler.ArrayTypeHandler.class)

private Integer[] targetStatus; //操作的目标数据状态

java mybatis操作 postgresql array数组类型备忘

postgrey sql数据库字段类型varchar[],java使用String[]类型,自定义ArrayTypeHandler

ArrayTypeHandler.java

public class ArrayTypeHandler extends BaseTypeHandler {

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());

}

// 这3行是关键的代码,创建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 http://null;

}

}

配置文件中映射配置,增加typeHandler属性,填写ArrayTypeHandler.java的全路径。

用到的SQL:

insert into t_qz_qzf(id,source_type)

values

(#{id,jdbcType=VARCHAR},#{sourceType,jdbcType=ARRAY,typeHandler="com.wang.common.ArrayTypeHandler"})


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【每日算法】数据结构综合运用:「哈希表套数组」&「哈希表套树」(数字分析法构造哈希表详解)
下一篇:【剑指 の 精选】详解「删除链表中重复结点」的两种解法(剑指诸天)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~