Det är faktiskt möjligt att göra det med @Options
anteckning (förutsatt att du använder auto_increment eller något liknande i din databas) :
@Insert("insert into table3 (id, name) values(null, #{name})")
@Options(useGeneratedKeys=true, keyProperty="idName")
int insertTable3(SomeBean myBean);
Observera att keyProperty="idName"
del är inte nödvändig om nyckelegenskapen i SomeBean heter "id". Det finns också en keyColumn
attribut tillgängligt, för de sällsynta fall då MyBatis inte kan hitta primärnyckelkolumnen själv. Observera också att genom att använda @Options
, skickar du din metod till några standardparametrar; det är viktigt att läsa dokumentet (länkad nedan -- sidan 60 i den aktuella versionen) !
(Gammalt svar) Den (ganska nyligen) @SelectKey
annotering kan användas för mer komplex nyckelhämtning (sekvenser, identity() funktion...). Här är vad MyBatis 3 Användarhandbok
(pdf) erbjuder som exempel:
@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);