3

現在、データベースには、挿入するすべてのレコードに uuid を渡すトリガーがあります。mybatis でレコードを挿入するときに、挿入された行数ではなく、その uuid を取得したいと考えています。

以前の投稿から、私はそれを行うことができると読みました

useGeneratedKeys="true" keyProperty="id"

しかし、uuid をバイナリとして保存するので、挿入から非バイナリ uuid を取得したいと思います。ものを挿入するときは、「uuid2bin」や「bin2uuid」などの関数を使用するため、このような関数を使用して、新しく生成された uuid をデータベース (MySQL) から取得したいと考えていました。

新しく生成されたuuidを取り戻す方法について何か提案はありますか??

4

3 に答える 3

1

私が考えることができる2つのオプションは、1)MyBatisを使用してJavaで変換を行うTypeHandlerか、2)フォーマットされたUUIDを返すストアドプロシージャで挿入をラップすることです。

#1の問題は、負荷をDBからアプリケーションに移動することです。これは、MySqlがリモートの場合にパフォーマンスに影響を与える可能性があります。

<select>#2では、MyBatisでを使用する必要があります。ただし、実際にコミットすることを確認する必要があります。また、MyBatisキャッシングを使用している場合は、も設定する必要がありflushCache=trueます<select>

于 2011-08-26T17:35:47.653 に答える
0

<selectKey>タグ内の<insert>タグを使用します

<insert>
   <selectKey keyProperty="pk" resultType="Type" order="AFTER">
     select myDBFunction( (select triggerGeneratedColumnInBinary from myTable where pk = triggerLogicToRetrieveLastGenerated(...) ) );
   </selectKey>
   ...procedure call or insert...
</insert>

ハッシュマップではなくオブジェクトを送信する場合、このコードは、挿入後にトリガー生成列を使用してインタープリター関数の結果を設定します。メソッドは引き続き行数を返しますが、オブジェクトにはキーが配置されています。

System.out.println(myObject.getPk()); //0
int rows = myMapper.insertMyClass(myObject); // sets the pk
System.out.println(myObject.getPK()); //324

useGeneratedKeys は、MyBatis に JDBC の getGeneratedKeys メソッドを使用して、データベースによって内部的に生成されたキーを取得するように指示するため、役に立ちません (たとえば、MySQL や SQL Server などの RDBMS の自動インクリメント フィールド)。

于 2015-08-23T03:26:23.913 に答える