2010-09-23 5 views
1

Je voudrais écrire quelque chose comme ça dans mybatis (en utilisant anotations au lieu de XML):Comment ajouter plusieurs paramètres nommés à l'instruction SQL?

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

Est-ce possible? De quelle façon précisément?

(Note, je voudrais utiliser les objets que je connais de type utilisateur pour le type-safty. Qu'utiliser paramètres int et utiliser # {1} et # {2} comme placeholders travaillerait)

Répondre

2

Vous pouvez utiliser les annotations pour fournir un espace de noms pour les paramètres d'entrée multiples. Ceux-ci donnent essentiellement de jolis noms aux identifiants # {1.foo} et # {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

Je vais essayer! –

+0

Oui, ça marche, merci beaucoup. –

0

Il semble que ce n'est pas possible, donc je créé une classe wrapper:

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

Et a changé le Mapper à ceci:

@Insert("INSERT INTO friendships (user_id, friend_id) VALUES (#{userId}, #{friendId})") 
public void insert(Friendship friendship); 
Questions connexes