2010-09-23 59 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);