In realtà, è possibile farlo, con il @Options
annotation (a condizione che tu stia utilizzando auto_increment o qualcosa di simile nel tuo database) :
@Insert("insert into table3 (id, name) values(null, #{name})")
@Options(useGeneratedKeys=true, keyProperty="idName")
int insertTable3(SomeBean myBean);
Nota che il keyProperty="idName"
parte non è necessaria se la proprietà della chiave in SomeBean è denominata "id". C'è anche una keyColumn
attributo disponibile, per i rari casi in cui MyBatis non riesce a trovare da solo la colonna della chiave primaria. Tieni inoltre presente che utilizzando @Options
, stai inviando il tuo metodo ad alcuni parametri predefiniti; è importante consultare il doc (linkato sotto -- pagina 60 nella versione attuale) !
(Risposta precedente) Il (piuttosto recente) @SelectKey
l'annotazione può essere utilizzata per il recupero di chiavi più complesse (sequenze, funzione identity()...). Ecco cosa è il Guida per l'utente di MyBatis 3
(pdf) offerte come esempi :
@Insert("insert into table3 (id, name) values(#{nameId}, #{name})")
@SelectKey(statement="call next value for TestSequence", keyProperty="nameId", before=true, resultType=int.class)
int insertTable3(Name name);
@Insert("insert into table2 (name) values(#{name})")
@SelectKey(statement="call identity()", keyProperty="nameId", before=false, resultType=int.class)
int insertTable2(Name name);