Domanda

mi piacerebbe scrivere qualcosa di simile in myBatis (usando anotations invece di XML):

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

È possibile? Come funziona esattamente?

(Nota, vorrei utilizzare gli oggetti di tipo utente per il tipo-safty. So che l'utilizzo di parametri int e l'uso # {1} e # {2} come segnaposto avrebbe funzionato)

È stato utile?

Soluzione

È possibile utilizzare le annotazioni per fornire uno spazio dei nomi per più parametri di input. Questi in sostanza, danno nomi piacevoli per il # {1.foo} e # {} 2.bar identificatori.

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

Altri suggerimenti

Sembra che questo non è possibile, così ho creato una 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();
  }
}

E ha cambiato il Mapper a questo:

@Insert("INSERT INTO friendships (user_id, friend_id) VALUES (#{userId}, #{friendId})")
public void insert(Friendship friendship);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top