Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment renvoyer les identifiants sur les inserts avec mybatis dans mysql avec des annotations

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);