Last ID, iBATIS y MySql
Adicto como soy a las claves primarias auto-incrementales en MySql me perseguía el problema de no saber cuál era el ID con el que el último registro había sido insertado.
Esto me obliga a hacer indecorosos malabarismos para conseguirlo: sincronizar el método y solicitar el último ID insertado justo después de la inserción, solicitar la ID del registro por algún otro campo de clave única…
Hoy me dá por googlear un poco y me encuentro con una joyita del 2005 entre los archivos de una lista de correo.
Aquí está la solución para que la propia llamada al ‘insert’ te retorne el ID creado:
Si por ejemplo tenemos esta sentencia ‘insert’ en nuestro fichero de iBATIS:
<insert id="insertSentence" > insert into MY_TABLE ( FIELD_1, FIELD_2 ) values ( #value1#, #value2# ) </insert>
Hay que modificarla de esta manera:
<insert id="insertSentence" > insert into MY_TABLE ( FIELD_1, FIELD_2 ) values ( #value1#, #value2# ) <selectKey resultClass="long" keyProperty="ID" > select LAST_INSERT_ID() </selectKey> </insert>
Y el ID podrás recogerlo desde la llamada al mapeador de iBATIS:
Long key = (Long) sqlMap.insert( "insertSentence" );
Ahora soy un poquitín más feliz… espero que tú también.