Pregunta

Me gustaría escribir algo como esto en mybatis (usando anotations en lugar de XML):

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

¿Es esto posible? ¿Cómo exactamente?

(Nota, me gustaría utilizar Objetos de Tipo de usuario para el tipo-safty. Yo sé que el uso de parámetros int y el uso # {1} y # {2} como marcadores de posición trabajarían)

¿Fue útil?

Solución

Puede utilizar las anotaciones para proporcionar un espacio de nombres para varios parámetros de entrada. Estos esencialmente dan nombres agradables para el # {1.foo} y {#} 2.bar identificadores.

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

Otros consejos

Parece que esto no es posible, así que creé una clase contenedora:

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

Y cambió el Mapper para esto:

@Insert("INSERT INTO friendships (user_id, friend_id) VALUES (#{userId}, #{friendId})")
public void insert(Friendship friendship);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top