mybatisを使用して配列値をpostgreSQLに挿入する方法

S.Lee:

私のクラス

class PgFolder {
    long id;
    int[] pgFeature;
}
getter...
setter...

私のテーブル

CREATE TABLE folder {
    ID BIGSERIAL PRIMARY KEY,
    feature INT[]
}

私のxml

<insert id="insertManyFolder" parameterType="java.util.List">
    INSERT INTO
        folder
       (feature)
        VALUES
        <foreach collection="list" item="item" index="" separator=",">
            (#{item.pgFeature})
        </foreach>
</insert>

List<PgFolder>リストを挿入したいリストには多くのPgFolderインスタンスがあります。プログラムを実行すると、エラーが発生しました。

org.apache.ibatis.exceptions.PersistenceException:
データベースの更新中にエラーが発生しました。原因:java.lang.IllegalStateException:プロパティ '__frch_item_0.pgFeature'のパラメーターマッピングで型ハンドラーがnullでした。javaType(java.util.List):jdbcType(null)の組み合わせで指定されていないか、見つからなかった。
原因:java.lang.IllegalStateException:タイプハンドラーは、プロパティ '__frch_item_0.pgFeature'のパラメーターマッピングでnullでした。javaType(java.util.List):jdbcType(null)の組み合わせで指定されていないか、見つからなかった。**

このエラーメッセージが表示されたのはなぜですか?配列の値を正しい方法で挿入するにはどうすればよいですか?postgresクライアントでsqlを使用する場合、配列値を挿入できます。そのため、私がインストールしたバージョンのpostgresは配列値をサポートできます。

ave:

マッピングInteger[]プロパティとマッピングint[]プロパティの両方のソリューションについて説明します。

マッピング Integer[]

class PgFolder {
  long id;
  Integer[] pgFeature;
  // getter / setter
}

この場合、MyBatisの組み込みを使用できますArrayTypeHandlerパラメータ参照での
指定typeHandlerで十分です。

<foreach ...>
  (#{item.pgFeature,typeHandler=org.apache.ibatis.type.ArrayTypeHandler})
</foreach>

マッピング int[]

ビルトインArrayTypeHandlerはプリミティブ配列では機能しない可能性があるため、カスタムタイプハンドラーの作成が必要になる場合があります。例えば

package pkg;

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

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

public class PgIntArrayTypeHandler extends BaseTypeHandler<int[]>{
  @Override
  public void setNonNullParameter(PreparedStatement ps, int i, int[] parameter, JdbcType jdbcType)
      throws SQLException {
    ps.setObject(i, parameter);
  }

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

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

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

  protected int[] extractArray(Array array) throws SQLException {
    if (array == null) {
      return null;
    }
    // pgjdbc returns Integer[] for the INT[] column
    Integer[] wrapperArray = (Integer[]) array.getArray();
    int[] result = Arrays.stream(wrapperArray).mapToInt(Integer::intValue).toArray();
    array.free();
    return result;
  }
}

次に、パラメーター参照で型ハンドラーを指定します。

<foreach ...>
  (#{item.pgFeature,typeHandler=pkg.PgIntArrayTypeHandler})
</foreach>

MyBatis 3.5.5およびpgjdbc 42.2.15でテスト済み。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

nodejsを使用してpostgresqlに値の配列を挿入する方法

分類Dev

NpgSqlを使用して文字列の配列をPostgresql列に挿入する方法

分類Dev

jsonを使用してjsonの配列要素の配列内に値を挿入する方法または以下のjson文字列に値を挿入する方法

分類Dev

PHPを使用してmysqlに配列を挿入する方法

分類Dev

配列値を行列座標として使用して、行列に値を挿入する方法

分類Dev

PHPを使用して2番目の配列値を最初の配列に挿入する方法

分類Dev

Joltを使用して特定の配列要素に配列を挿入する方法

分類Dev

phpを使用してphpmyadminに配列の配列を挿入する方法

分類Dev

Java SpringbootでjdbcTemplateを使用して整数配列をpostgresqlテーブルに挿入する方法は?

分類Dev

Java SpringbootでjdbcTemplateを使用して整数配列をpostgresqlテーブルに挿入する方法は?

分類Dev

Java SpringbootでjdbcTemplateを使用して整数配列をpostgresqlテーブルに挿入する方法は?

分類Dev

JavaScriptを使用して配列に一度に2つの値を挿入する方法

分類Dev

ループを使用して4つの配列値をMySQLに挿入する

分類Dev

JDBCを使用して値をpostgresqlに挿入する

分類Dev

ロジックアプリを使用して配列値をテーブルに挿入する方法

分類Dev

JavaScriptを使用して配列からオブジェクトに値を挿入する方法は?

分類Dev

jQueryを使用して特定のインデックスで2D配列に値を挿入する方法

分類Dev

区切り文字を使用して配列からOracleのテーブルに値を挿入する方法

分類Dev

for each ループを使用してデータベースに配列値を挿入する方法

分類Dev

Laravelを使用して配列値をデータベースに挿入する方法

分類Dev

PostgreSQLの配列列に値を挿入します

分類Dev

laravelを使用して複数の配列をmysqlに挿入する方法

分類Dev

連想配列を使用してMySqlにデータを挿入する方法

分類Dev

連想配列を使用してMySqlにデータを挿入する方法

分類Dev

node.jsを使用してmongodbに配列を挿入する方法

分類Dev

PHPを使用して1000行以上をPostgresqlに挿入する方法

分類Dev

配列のJSON配列を個別の要素としてPostgreSQLに挿入する方法

分類Dev

phpを使用してmysqlに配列を挿入する

分類Dev

c# を使用して要素を配列に挿入する

Related 関連記事

  1. 1

    nodejsを使用してpostgresqlに値の配列を挿入する方法

  2. 2

    NpgSqlを使用して文字列の配列をPostgresql列に挿入する方法

  3. 3

    jsonを使用してjsonの配列要素の配列内に値を挿入する方法または以下のjson文字列に値を挿入する方法

  4. 4

    PHPを使用してmysqlに配列を挿入する方法

  5. 5

    配列値を行列座標として使用して、行列に値を挿入する方法

  6. 6

    PHPを使用して2番目の配列値を最初の配列に挿入する方法

  7. 7

    Joltを使用して特定の配列要素に配列を挿入する方法

  8. 8

    phpを使用してphpmyadminに配列の配列を挿入する方法

  9. 9

    Java SpringbootでjdbcTemplateを使用して整数配列をpostgresqlテーブルに挿入する方法は?

  10. 10

    Java SpringbootでjdbcTemplateを使用して整数配列をpostgresqlテーブルに挿入する方法は?

  11. 11

    Java SpringbootでjdbcTemplateを使用して整数配列をpostgresqlテーブルに挿入する方法は?

  12. 12

    JavaScriptを使用して配列に一度に2つの値を挿入する方法

  13. 13

    ループを使用して4つの配列値をMySQLに挿入する

  14. 14

    JDBCを使用して値をpostgresqlに挿入する

  15. 15

    ロジックアプリを使用して配列値をテーブルに挿入する方法

  16. 16

    JavaScriptを使用して配列からオブジェクトに値を挿入する方法は?

  17. 17

    jQueryを使用して特定のインデックスで2D配列に値を挿入する方法

  18. 18

    区切り文字を使用して配列からOracleのテーブルに値を挿入する方法

  19. 19

    for each ループを使用してデータベースに配列値を挿入する方法

  20. 20

    Laravelを使用して配列値をデータベースに挿入する方法

  21. 21

    PostgreSQLの配列列に値を挿入します

  22. 22

    laravelを使用して複数の配列をmysqlに挿入する方法

  23. 23

    連想配列を使用してMySqlにデータを挿入する方法

  24. 24

    連想配列を使用してMySqlにデータを挿入する方法

  25. 25

    node.jsを使用してmongodbに配列を挿入する方法

  26. 26

    PHPを使用して1000行以上をPostgresqlに挿入する方法

  27. 27

    配列のJSON配列を個別の要素としてPostgreSQLに挿入する方法

  28. 28

    phpを使用してmysqlに配列を挿入する

  29. 29

    c# を使用して要素を配列に挿入する

ホットタグ

アーカイブ