簡體   English   中英

如何使用mybatis在postgres中將int []映射為integer []

[英]How to map an int[] to an integer[] in postgres using mybatis

我的java pojo中有一個整數數組int []大小。 我將它存儲在postgres中,其大小為integer []。 我正在嘗試使用mybatis將其映射為如下結果圖:

<resultMap id="result" type="javaPojo">
   <result column="sizes" jdbcType="ARRAY" property="sizes"/>
</resultMap>

每次遇到類似以下錯誤:

解析SQL Mapper配置時出錯,導致java.lang.IllegalStateException:找不到屬性大小的類型處理程序。

一切都是使用Java程序生成的,由於公司政策我無法透露。

由於typeHandlers不支持int []而收到此錯誤。 有關mybatis的更多詳細支持類型,請參閱: Type Handlers Mybatis

現在,我為您提供2種解決方案。

  1. 在此處創建新的類型處理程序。

  2. int[]更改為List<Integer>

示例代碼:

只需將resultType聲明為所需的原始類型,在您的情況下為Integer。 它將作為列表返回。

<select id="getPrice" resultType="java.lang.Integer">
  select product_price from products
</select>

在映射器界面中,您應該期望返回Long列表。

List<Integer> getPrice();

我從此鏈接克隆了上面的示例

MyBatis具有內置的ArrayTypeHandler ,但是,它可能返回Integer[]而不是int[] (這取決於驅動程序的ResultSet#getArray()實現)。

如果可以將屬性類型更改為Integer[] ,則有兩種使用內置ArrayTypeHandler

  1. 本地設置:在<result />顯式指定typeHandler

     <result column="sizes" jdbcType="ARRAY" property="sizes" typeHandler="org.apache.ibatis.type.ArrayTypeHandler" /> 
  2. 全局設置:在MyBatis配置中針對int[]注冊ArrayTypeHandler 使用XML config,它將如下所示。

     <typeHandlers> <typeHandler handler="org.apache.ibatis.type.ArrayTypeHandler" javaType="int[]" jdbcType="ARRAY" /> </typeHandlers> 

如果由於某種原因該屬性類型必須為int[] ,則可能必須編寫一個自定義類型處理程序,以將Integer[]轉換為int[]
假設您使用的是MyBatis 3.5.0或更高版本,則可以對內置實現進行子類化並重寫extractArray()方法。

import java.sql.Array;
import java.sql.SQLException;
import java.util.Arrays;

import org.apache.ibatis.type.ArrayTypeHandler;

public class IntArrayTypeHandler extends ArrayTypeHandler {
  @Override
  protected Object extractArray(Array array) throws SQLException {
    Integer[] src = (Integer[]) super.extractArray(array);
    int[] dest = new int[src.length];
    // Assuming there is no null in the data
    Arrays.setAll(dest, i -> src[i]);
    return dest;
  }
}

用法與內置的用法基本相同。
但是,在XML配置中指定javaType時, javaType必須為_int[]因為intInteger別名

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM