En fait, il est possible de le faire, avec le @Options
annotation (à condition que vous utilisiez auto_increment ou quelque chose de similaire dans votre base de données) :
@Insert("insert into table3 (id, name) values(null, #{name})")
@Options(useGeneratedKeys=true, keyProperty="idName")
int insertTable3(SomeBean myBean);
Notez que le keyProperty="idName"
part n'est pas nécessaire si la propriété de clé dans SomeBean est nommée "id". Il y a aussi une keyColumn
attribut disponible, pour les rares cas où MyBatis ne trouve pas lui-même la colonne de la clé primaire. Veuillez également noter qu'en utilisant @Options
, vous soumettez votre méthode à certains paramètres par défaut ; il est important de consulter la doc (lien ci-dessous -- page 60 dans la version actuelle) !
(Ancienne réponse) Le (assez récent) @SelectKey
l'annotation peut être utilisée pour une récupération de clé plus complexe (séquences, fonction identity()...). Voici ce que le Guide d'utilisation de MyBatis 3
(pdf) propose à titre d'exemples :
@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);