En realidad, es posible hacerlo, con el @Options
anotación (siempre que se está utilizando aUTO_INCREMENT o algo similar en su base de datos):
@Insert("insert into table3 (id, name) values(null, #{name})")
@Options(useGeneratedKeys=true, keyProperty="idName")
int insertTable3(SomeBean myBean);
Tenga en cuenta que la parte no es necesario si la propiedad clave en SomeBean se denomina "id". También hay un atributo keyColumn
disponible, para los raros casos en que MyBatis no puede encontrar la columna de la clave principal por sí mismo. Tenga en cuenta que al usar @Options
, está enviando su método a algunos parámetros predeterminados; es importante consultar el documento (vinculado a continuación - página 60 en la versión actual)!
(respuesta Viejo) La (muy reciente) @SelectKey
anotación se puede utilizar para la recuperación más compleja clave (secuencias, función identidad() ...).Esto es lo que la MyBatis 3 User Guide (pdf) ofrece como ejemplos:
Este ejemplo muestra el uso de la anotación @SelectKey para recuperar un valor de una secuencia antes de que un inserción:
@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);
Este ejemplo muestra usando la anotación @SelectKey para recuperar un valor de identidad después de una inserción:
@Insert("insert into table2 (name) values(#{name})")
@SelectKey(statement="call identity()", keyProperty="nameId", before=false, resultType=int.class)
int insertTable2(Name name);
Suponiendo que usa la anotación para seleccionar y con '@Options (useGeneratedKeys = true)' – Lucky