私はこの質問を以前に尋ねました。実際には解決策に終わったわけではありませんでした。mybatisを介してSQLストアドプロシージャにJavaオブジェクトのリストを送信しますか?
私はそれに関するより良い情報を含めるつもりですので、これを複製としてフラグを立てないでください。私たちは、私は信じてここに結果マップを無視することができ、今
<select id="deleteItems" resultMap="BaseResultMap">
exec [dbo].[PR_ItemsForDeletion_Delete]
</select>
- 私は、私は戻って取得していますどのように関係しておりませんので
今、:
は、ここに私のマッパーxmlです(まだ!)そのストアドプロシージャを参照してください?私はそれを書いていませんでした - そして、私もそのコードにアクセスすることはできません - しかし、私はそれが動作するという事実を知っています。
ストアドプロシージャには項目のリストがあります。私は、次を渡す必要があります。そのSPROCの作品を信頼
List<CustomDeletableObject>
、およびマッパーと私はちょうどそのマッピングのXMLを実行したい - と、それにリストを渡したが、私はどこから始め絶対にないアイデアを持っていませんそれと。
事前に大喜びしていますが、私は数時間前からこれに対して頭を叩いています。 - 我々が使用するだけのIDです
プライベート長いID:
はカスタム削除可能なオブジェクト・タイプは、2つのプロパティが含まれています。プライベートスティングトークン - 実際に格納しているデータ。
ストアドプロシージャでは、クエリ自体にアクセスすることはできませんが、基本的にはテーブル内のすべてのアイテムを削除します。リスト内の項目に一致するものはmyBatis 。
これは私がマッパーを呼び出すために計画しています方法です...ここで
@Override
public boolean deleteItems(List<CustomDeletableObject> tokens){
// This method handles the deletion.
jobMapper.deleteItems();
return false;
}
は、私が使用しようとしていますストアドプロシージャです:セキュリティの関心では、テーブル名はナンセンスTABLEに置き換えられていますタグ。
CREATE PROCEDURE [dbo].[PR_ItemsForDeletion_Delete]
@pTokenList dbo.UDT_TokenDeletion READONLY
AS
BEGIN
BEGIN TRY
IF EXISTS (SELECT TOP 1 1 FROM @pTokenList)
BEGIN
INSERT INTO <TABLE> (Token)
SELECT
Token
FROM @pTokenList tl
WHERE NOT EXISTS
(
SELECT TOP 1 1
FROM <TABLE> tp
WHERE tp.Token = tl.Token
)
END
END TRY
BEGIN CATCH
;THROW
END CATCH
END
本当にありがとうございます。実際のリストをストアドプロシージャに渡す方法はありません。私は配列を渡す必要がありますか? – MickeyThreeSheds
第1の例は、Oracle Arrayの型ハンドラを記述することです。これは実装方法を説明するためのものであり、それに焦点を当てるのではなく、一般化してください。あなたのケースでは、リストからSQLServerDataTable(2番目のリンク)を作成し、型ハンドラの実装でコピー/ペーストしても、ほんのわずかしか適応できない場合があります。 – blackwizard
ありがとうございます - 私は調査します。これは今までに一番難しいことです。私は14週間それに取り組んでいます。 :( – MickeyThreeSheds