Cómo añadir varios parámetros con nombre a la instrucción SQL?
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)
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