java mybatis操作 postgresql array数组类型
2017-05-03 19:32
344 查看
找了半天没有找到postgresql中关于array数组类型的字段如何对应到java中的数据类型,后来找到了mybatis的TypeHandler,只要实现一个自定义的TypeHandler就行了,如下,我定义了几个基础数据类型的数组
然后在实体类里面对应的字段配置这个转换器就行,如果是配置文件需要在 xxmap.xml中配置对应属性
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()); } // 这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数组操作函数---System.arraycopy-arrays.sort
- java操作Oracle类型XMLType总结二:使用Mybatis
- PostgreSQL: array 数组类型添加元素 数组的使用
- JAVA基础 day23 IO流的其他类 (对象的序列化 管道流 RandomAccessFile类(随机读取文件) DateStream(操作基本数据类型的流) 操作数组的流 )字符编码问题
- Mybatis类型, Java类型和PostgreSQL数据库类型的对应关系(草稿)
- Java——协变数组和类型擦除(covariant array & type erasure)
- Java中的移位操作以及基本数据类型转换成字节数组【收集】
- mybatis 处理数组类型及使用Json格式保存数据 JsonTypeHandler and ArrayTypeHandler
- spring 从jsp页面传array数组到后台,自动转化为java的数组类型
- Java中对Array数组的常用操作
- mybatis 处理数组类型及使用Json格式保存数据 JsonTypeHandler and ArrayTypeHandler
- mybatis 处理数组类型及使用Json格式保存数据 JsonTypeHandler and ArrayTypeHandler
- JDBC:Java数组和数据库中Array类型的映射
- Array类型(数组项操作和位置查找)
- java操作Oracle数据库——ARRAY、TABLE类型批量入库
- Java -- 利用反射 操作任意数组,包括对象数组 和 基本数据类型的数组
- mybatis 处理数组类型及使用Json格式保存数据 JsonTypeHandler and ArrayTypeHandler
- mybatis 处理数组类型及使用Json格式保存数据 JsonTypeHandler and ArrayTypeHandler
- Java中对Array数组的常用操作
- Java 协变数组和类型擦除(covariant array & type erasure)