Как добавить несколько именованных параметров в оператор SQL? - PullRequest
1 голос
/ 23 сентября 2010

Я хотел бы написать что-то подобное в myBatis (используя аннотации вместо XML):

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

Возможно ли это?Как именно?

(Обратите внимание, я хотел бы использовать объекты типа User для обеспечения безопасности типов. Я знаю, что использование параметров int и использование # {1} и # {2} в качестве заполнителей будет работать)

Ответы [ 2 ]

2 голосов
/ 28 апреля 2011

Вы можете использовать аннотации для предоставления пространства имен для нескольких входных параметров.По сути, они дают хорошие имена идентификаторам # {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)
0 голосов
/ 30 сентября 2010

Кажется, что это невозможно, поэтому я создал класс-оболочку:

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();
  }
}

И изменил Mapper на это:

@Insert("INSERT INTO friendships (user_id, friend_id) VALUES (#{userId}, #{friendId})")
public void insert(Friendship friendship);
...