Как добавить несколько названных параметров в оператор 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);

Это возможно? Как именно?

(Примечание, я хотел бы использовать объекты пользователей типа для типа SIFTTY. Я знаю, что используя параметры 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();
  }
}

И поменял Mapper к этому:

@Insert("INSERT INTO friendships (user_id, friend_id) VALUES (#{userId}, #{friendId})")
public void insert(Friendship friendship);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top