Mybatis自動生成プライマリ・キー値の取得

2880 ワード

紹介する
いくつかの特殊な需要に対して:データを挿入したばかりのプライマリ・キー値を得て、生成したばかりのデータを処理するために、どのように挿入したばかりのプライマリ・キー値を得るかには2つの大きな方向があります.1つ目は、データベースで独自の方法を取得することです.データ挿入後に「select@@indentity」と入力するには、通常、ストレージ・プロシージャと組み合わせる必要があり、複雑です.2つ目は、バックグラウンド挿入時に取得します.ここでは,バックグラウンドが挿入されたばかりのときにプライマリキー値が得られることを主に述べる.
詳細
バックグラウンド・データの挿入時にプライマリ・キー値を取得する場合も、プライマリ・キーの自己増加データベースをサポートする場合と、プライマリ・キーの自己増加をサポートしない場合の2つに分けられます.一、Mysql、sqlServerなどのプライマリ・キーの自動生成をサポートするデータベースでは、Mybatis要素useGeneratedKeysを使用して、現在挿入されているデータのプライマリ・キー値を入力クラスに戻すことができます.
具体的な応用
id="insertTest" useGeneratedKeys="true" keyProperty="id" 
 parameterType="com.kq.domain.IdentityTest">
        insert into identity_test(name)
        values(#{name,jdbcType=VARCHAR})

この挿入文を実行すると、エンティティクラスIdentityTestのIdは、現在挿入されているデータのプライマリ・キーによって自動的に入力されます.
二、プライマリ・キーの自動生成がサポートされていないデータベースについて.Oracle、DB 2などは、要素selectKeyで現在挿入されているデータのプライマリ・キー値を入力クラスに戻すことができます.(カスタムランダム・プライマリ・キーも生成)
具体的な応用
"insertTest" useGeneratedKeys="true" keyProperty="id" 
 parameterType="com.kq.domain.IdentityTest">
 "id" resultType="String" order="BEFORE">
        SELECT  REPLACE(UUID(),'-','')  
  
        insert into identity_test(name)
        values(#{name,jdbcType=VARCHAR})

この挿入文を実行すると、エンティティクラスIdentityTestのIdも、現在挿入されているデータのプライマリ・キーによって自動的に入力されます.
補足
selectKey要素の説明:
ツールバーの
説明
keyProperty
selectKey文の結果が設定されるべきターゲット属性.複数の生成されたカラムを取得する場合は、カンマで区切られたプロパティ名のリストでも構いません.
keyColumn
プロパティの戻り結果セットのカラム名を一致させます.複数の生成されたカラムを取得する場合は、カンマで区切られたプロパティ名のリストでも構いません.
resultType
結果のタイプ.MyBatisは通常推定できますが、より確実に書くために問題はありません.MyBatisでは、文字列を含む単純なタイプをプライマリ・キーのタイプとして使用できます.複数の生成された列に作用する場合は、所望の属性を含むObjectまたはMapを使用します.
order
これはBEFOREまたはAFTERに設定することができる.BEFOREに設定すると、まずプライマリ・キーを選択し、keyPropertyを設定して挿入文を実行します.AFTERに設定されている場合は、まず挿入文、次にselectKey要素を実行します.これはOracleのようなデータベースと似ています.挿入文の内部にインデックス呼び出しが埋め込まれている可能性があります.
statementType
MyBatisは、PreparedStatementタイプとCallableStatementタイプを表すSTATEMENT、PREPARED、CALLABLE文のマッピングタイプをサポートします.