1

我想在 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} 作为占位符会起作用)

4

2 回答 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)
于 2011-04-27T20:46:36.937 回答
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);
于 2010-09-30T09:13:26.860 回答