MybatisのuseGeneratedKeysとselectKeysの基本的な使い方と違い

1705 ワード

一、useGeneratedKeys
データベース自体がプライマリ・キーの自動成長機能を備えているため、useGeneratedKeys oracleではtrueがサポートされていません.

	insert into tableName (colName) values (#{colVal,jdbcType=VARCHAR})


(insert and update only)This tells MyBatis to use the JDBC getGeneratedKeys method to retrieve keys generated internally by the database(e.g.auto increment fields in RDBMS like MySQL or SQL Server).Defauult:false(挿入と更新のみ)この訴えMyBatisはJDBC getGeneratedKeysメソッドを使用してデータベース内部で生成された鍵を取得する(たとえば、RDBMSの自動増分フィールド(MySQLやSQL Serverなど).デフォルト:false
二、selectKey
データベースがuseGeneratedKeys="true"をサポートしていない場合は、selectKey(oracleなど)を使用します.

	
		select currval('seq_name') from dual
	
    insert into tableName (colName) values (#{colVal,jdbcType=VARCHAR})


mysqlにはlast_insert_id()という方法があり、ラベルで使用できます.
selectKeyプロパティ:
属性名
意味
keyProperty
selectKey文のターゲット属性
resultType
結果のタイプ.MyBatisは通常計算できますが、書いても問題ありません.MyBatisは文字列を含む単純なタイプをプライマリ・キーのタイプとして使用できます.
order
BEFOREまたはAFTER.BEFOREに設定すると、プライマリ・キーが最初に問合せられ、keyPropertyが設定されてから挿入文が実行されます.AFTERに設定すると、まず挿入文が実行され、次にプライマリ・キーが取得されます.これはOracleデータベースと同様に、挿入文にシーケンス・コールを埋め込むことができます.
statementType
MyBatisは、PreparedStatementタイプとCallableStatementタイプを表すSTATEMENT、PREPARED、CALLABLE文のマッピングタイプをサポートします.
注意点高同時性の場合、mysqlのlast_insert_id()の戻り値は、他の人が操作しているデータが返すidであり、保険操作は一意のインデックスに基づいてデータを再問合せすることである.