Eigenlijk is het mogelijk om het te doen, met de @Options
annotatie (op voorwaarde dat u auto_increment of iets dergelijks gebruikt in uw database):
@Insert("insert into table3 (id, name) values(null, #{name})")
@Options(useGeneratedKeys=true, keyProperty="idName")
int insertTable3(SomeBean myBean);
Merk op dat de keyProperty="idName"
deel is niet nodig als de sleuteleigenschap in SomeBean "id" heet. Er is ook een keyColumn
attribuut beschikbaar, voor de zeldzame gevallen waarin MyBatis de primaire sleutelkolom niet zelf kan vinden. Houd er ook rekening mee dat door het gebruik van @Options
, u onderwerpt uw methode aan enkele standaardparameters; het is belangrijk om het document te raadplegen (hieronder gelinkt -- pagina 60 in de huidige versie) !
(Oud antwoord) De (vrij recente) @SelectKey
annotatie kan worden gebruikt voor het ophalen van complexere sleutels (reeksen, identiteit()-functie...). Dit is wat de MyBatis 3 Gebruikershandleiding
(pdf) biedt als voorbeelden:
@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);