Как добавить несколько названных параметров в оператор SQL?
Вопрос
Я хотел бы написать что-то вроде этого в 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);
Не связан с StackOverflow