En realidad, es posible hacerlo, con @Options
anotación (siempre que esté usando 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 keyProperty="idName"
part no es necesario si la propiedad clave en SomeBean se llama "id". También hay una keyColumn
atributo disponible, para los raros casos en que MyBatis no puede encontrar la columna de clave principal por sí mismo. Tenga en cuenta también 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 antigua) El (bastante reciente) @SelectKey
la anotación se puede utilizar para la recuperación de claves más complejas (secuencias, función de identidad()...). Esto es lo que dice la Guía de usuario de MyBatis 3
(pdf) ofrece como ejemplos:
@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);