1.数据表结构

CREATE TABLE "error_code" (
  "err_code" varchar(15) COLLATE "pg_catalog"."default" NOT NULL,
  "ori_code" varchar[] COLLATE "pg_catalog"."default",
  "system" varchar(20) COLLATE "pg_catalog"."default",
  "err_desc_en" varchar(300) COLLATE "pg_catalog"."default",
  "err_desc_cn" varchar(300) COLLATE "pg_catalog"."default",
  "usr_desc_en" varchar(300) COLLATE "pg_catalog"."default",
  "usr_desc_cn" varchar(300) COLLATE "pg_catalog"."default",
  "udate" timestamp(6),
  "oper_user" varchar(255) COLLATE "pg_catalog"."default"
);

2.实体类

public class ErrorCode {
	private String errCode;
	private String[] oriCode;
	private String system;
	private String errDescEn;
	private String errDescCn;
	private String usrDescEn;
	private String usrDescCn;
	private String operUser;
	private LocalDateTime updateTime = LocalDateTime.now();
}	

3.自定义typeHandler配置类


package com.test.errorcode.config;

import java.sql.Array;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class ArrayTypeHandler extends BaseTypeHandler<Object[]>{
	
	private static final Logger LOGGER = LoggerFactory.getLogger(ArrayTypeHandler.class);
	
	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)就可以了
        Array array = ps.getConnection().createArrayOf(typename, parameter);
        ps.setArray(i, array);
	}


	@Override
	public Object[] getNullableResult(ResultSet rs, String columnName) throws SQLException {
		return getArray(rs.getArray(columnName));
	}


	@Override
	public Object[] getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
		return getArray(rs.getArray(columnIndex));
	}


	@Override
	public Object[] getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
		return getArray(cs.getArray(columnIndex));
	}


	private Object[] getArray(Array array) {

		if (array == null) {
			return null;
		}

		try {
			return (Object[]) array.getArray();
		} catch (SQLException e) {
			LOGGER.error("ArrayTypeHandler getArray SQLException",e);
		}
		return null;

	}
}

4.mapper.java


package com.test.errorcode.dao.mapper;

import java.util.List;
import java.util.Set;

import org.apache.ibatis.annotations.Param;

import com.github.pagehelper.Page;
import com.test.errorcode.dao.entity.MdErrorCode;



public interface MdErrorCodeMapper {
	/**
	 * 根据错误码查询错误码数据信息
	 * @param errCode
	 * @return
	 */
	public MdErrorCode findByErrCode(String errCode);
	/**
	 * 根据错误码和原错误码查询数据列表
	 * @param errCode
	 * @param oriCode
	 * @return
	 */
	public List<MdErrorCode> queryErrorCodeByErrOrOri(@Param("errCode")String errCode,@Param("oriCode")String oriCode);
	/**
	 * 根据原错误码查询数据信息
	 * @param oriCode
	 * @return
	 */
	public MdErrorCode findByOriCode(String oriCode);
	/**
	 * 
	 * <p>Title: queryByOriCode</p>  
	 * <p>Description: queryByOriCode</p>  
	 * @param @param oriCode
	 * @param @return 参数 
	 * @return List<MdErrorCode> 返回类型
	 * @throws
	 */
	public List<MdErrorCode> queryByOriCode(String oriCode);
	/**
	 * 分页查询
	 * @param errCode
	 * @param oriCode
	 * @param system
	 * @return
	 */
	public Page<MdErrorCode> queryPage(@Param("errCode")String errCode,@Param("oriCode")String oriCode,@Param("system")String system);
	/**
	 * 
	 * @param errCodes
	 * @return
	 */
	public List<MdErrorCode> queryErrorCodesIn(@Param("errCodes")Set<String> errCodes);
	/**
	 * 插入
	 * @param errorCode
	 * @return
	 */
	public boolean insertErrorCode(@Param("errorCode")MdErrorCode errorCode);
	/**
	 * 批量插入
	 * @param errorCodes
	 * @return
	 */
	public int batchInsertErrorCode(@Param("errorCodes")List<MdErrorCode> errorCodes);
	/**
	 * 更新
	 * @param errorCode
	 * @return
	 */
	public boolean updateErrorCode(@Param("errorCode")MdErrorCode errorCode);
}

5.mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.errorcode.dao.mapper.MdErrorCodeMapper">
	<resultMap id="mdErrorCodeResultMap" type="com.test.errorcode.dao.entity.MdErrorCode">
 		<id property="errCode" column="err_code" />
 		<result property="oriCode" column="ori_code" jdbcType="ARRAY" typeHandler="com.test.errorcode.config.ArrayTypeHandler"/>
 		<result property="system" column="system" />
 		<result property="errDescEn" column="err_desc_en" />
 		<result property="errDescCn" column="err_desc_cn" />
 		<result property="usrDescEn" column="usr_desc_en" />
 		<result property="usrDescCn" column="usr_desc_cn" />
 		<result property="operUser" column="oper_user" />
 		<result property="updateTime" column="udate" />
 		
	</resultMap>
	
	<select id="findByErrCode" resultMap="mdErrorCodeResultMap" >
		select * from md_error_code where err_code = #{errCode}
	</select>
	
	<select id="queryErrorCodesIn" resultMap="mdErrorCodeResultMap" >
		select * from md_error_code where err_code in 
		<foreach collection="errCodes" item="errCode" index="index" open="(" close=")" separator=",">
			#{errCode}
		</foreach>
	</select>
	
	<select id="findByOriCode" resultMap="mdErrorCodeResultMap" >
		select * from md_error_code where ori_code @> array[#{oriCode}]
	</select>
	
	<select id="queryByOriCode" resultMap="mdErrorCodeResultMap" >
		select * from md_error_code where ori_code @> array[#{oriCode}]
	</select>
	
	<select id="queryErrorCodeByErrOrOri" resultMap="mdErrorCodeResultMap" >
		select * from md_error_code 
		<where>
			<if test="errCode != null">
				err_code = #{errCode}
			</if>
			<if test="oriCode != null">
				and ori_code @> array[#{oriCode}]
			</if>
		</where>
	</select>
	
	<select id="queryPage" resultMap="mdErrorCodeResultMap">
		select * from md_error_code 
		<where>
			<if test="errCode!=null"> err_code = #{errCode} </if>
			<if test="oriCode!=null"> and ori_code @> array[#{oriCode}] </if>
			<if test="system!=null"> and system = #{system} </if>
		</where>
		order by err_code
	</select>
	
	<insert id="insertErrorCode" parameterType="com.test.errorcode.dao.entity.MdErrorCode">
		insert into md_error_code 
		("err_code","ori_code","system","err_desc_en","err_desc_cn",
		"usr_desc_en","usr_desc_cn","oper_user","udate") 
		values 
		(#{errorCode.errCode},
		#{errorCode.oriCode, jdbcType=ARRAY, typeHandler=com.test.errorcode.config.ArrayTypeHandler},
		#{errorCode.system},#{errorCode.errDescEn},
		#{errorCode.errDescCn},#{errorCode.usrDescEn},#{errorCode.usrDescCn},#{errorCode.operUser},
		#{errorCode.updateTime})
	</insert>
	
	<insert id="batchInsertErrorCode">
		insert into md_error_code 
		("err_code","ori_code","system","err_desc_en","err_desc_cn",
		"usr_desc_en","usr_desc_cn","oper_user","udate") 
		values 
		<foreach collection="errorCodes" item="errorCode" separator =",">
			(#{errorCode.errCode},
			#{errorCode.oriCode, jdbcType=ARRAY, typeHandler=com.test.errorcode.config.ArrayTypeHandler},
			#{errorCode.system},#{errorCode.errDescEn},
			#{errorCode.errDescCn},#{errorCode.usrDescEn},#{errorCode.usrDescCn},#{errorCode.operUser},
			#{errorCode.updateTime})
		</foreach>
	</insert>
	
	<update id="updateErrorCode">
		update md_error_code 
		<set>
			ori_code=#{errorCode.oriCode,jdbcType=ARRAY, typeHandler=com.test.errorcode.config.ArrayTypeHandler},
			system=#{errorCode.system},err_desc_en=#{errorCode.errDescEn},err_desc_cn=#{errorCode.errDescCn},
			usr_desc_en=#{errorCode.usrDescEn},usr_desc_cn=#{errorCode.usrDescCn},oper_user=#{errorCode.operUser},
			udate=#{errorCode.updateTime} 
		</set>
		where err_code=#{errorCode.errCode}
	</update>
</mapper>