複数の名前のパラメーターをSQLステートメントに追加する方法は?

StackOverflow https://stackoverflow.com/questions/3780044

  •  04-10-2019
  •  | 
  •  

質問

MyBatisでこのようなことを書きたいと思います(XMLの代わりに嘆願を使用して):

@Insert("INSERT INTO friendships (user_id, friend_id) VALUES (#{user.id}, {friend.id})")
public void insert(User user, User friend);

これは可能ですか?どのように正確に?

(注意してください。タイプユーザーのオブジェクトをタイプサフティに使用したいと思います。INTパラメーターを使用して、プレースホルダーが機能するように#{1}と#{2}を使用することを知っています)

役に立ちましたか?

解決

注釈を使用して、複数の入力パラメーターに名前空間を提供できます。これらは本質的に#{1.foo}および#{2.bar}識別子に素敵な名前を与えます。

@Insert("INSERT INTO friendships (user_id, friend_id) VALUES (#{user.id}, 
#{friend.id})")
public void insert(@Param(value="user") User user, @Param(value="friend") User friend)

他のヒント

これは不可能だと思われるので、ラッパークラスを作成しました。

class Friendship {

  private final User user;
  private final User friend;

  public Friendship(User user, User friend) {
        this.user = user;
        this.friend = friend;
  }

  public int getUserId(){
        return user.getId();
  }

  public int getFriendId(){
        return friend.getId();
  }
}

マッパーをこれに変更しました。

@Insert("INSERT INTO friendships (user_id, friend_id) VALUES (#{userId}, #{friendId})")
public void insert(Friendship friendship);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top