2010-09-23 64 views
1

我想寫的MyBatis這樣的事情(使用而不是XML anotations):如何將多個命名參數添加到SQL語句中?

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

這可能嗎?究竟如何?

(注意,我想用型用戶的對象類型 - 安。我知道,使用int參數,並使用#{1}和#{2}爲佔位符會工作)

回答

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) 
+0

我會試試! – 2011-05-02 08:10:29

+0

是的,那工作,非常感謝。 – 2011-05-16 14:39:27

0

好像這是不可能的,所以我創建了一個包裝類:

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