Saturday July 7, 2007 20:31
Persistiendo objetos con iBatis – Parte III
Posted by admin as Java, JDO/DAO, Programación
Veamos ahora algunas otras operaciones típicas.
Supongamos que quiero insertar un topic en mi tabla Topic. Pues para empezar, agregamos la operación sql en nuestro archivo Topic.xml:
<insert id="insertTopic" parameterClass="topic"> INSERT INTO topic ( topic.topic_id, topic.topic_description ) VALUES (#id#, #description#); </insert>
Luego, en nuestra aplicación hacemos lo siguiente:
try { TopicBean tb = new TopicBean(); tb.setId("topic1"); tb.setDescription("Descripcion para topic1"); sqlMap = NotificationsSqlConfig.getSqlMapInstance(); sqlMap.startTransaction(); sqlMap.insert("insertTopic", tb); result = (Integer) sqlMap.queryForObject("operationResult"); sqlMap.commitTransaction(); } catch (SQLException e) { throw new RemoteException(e.getMessage(), e); } catch (Exception e) { throw new RemoteException(e.getMessage(), e); } finally { try { sqlMap.endTransaction(); } catch (SQLException e) { } }
Como puede verse en el código, primero creamos un TopicBean con los datos que queremos insertar. Luego, iniciamos una transacción, esto nos permitirá llevar un mejor control sobre el insert ya que – si algo falla – iBatis se encargará de hacer un roll back.
Luego, llamamos a la operación insert pasándole como parámetro el bean que hemos creado.
El insert no devolverá resultado, pero si queremos saber si todo ha ido bien podemos chequear las affected rows. Para eso creamos un nueva operacion en topic.xml:
<select id="operationResult" resultClass="java.lang.Integer"> SELECT ROW_COUNT(); </select>
La que nos devolverá un entero mayor que cero.
Supongamos ahora que queremos hacer un delete de un topic.
Nuevamente, agregamos la operación en el archivo topic.xml:
<delete id="deleteTopic" parameterClass="String"> DELETE FROM topic WHERE topic.topic_id = #value#; </delete>
y desde nuestra aplicación hacemos:
try { sqlMap = NotificationsSqlConfig.getSqlMapInstance(); sqlMap.startTransaction(); sqlMap.delete("deleteTopic", "topic uno"); result = (Integer) sqlMap.queryForObject("operationResult"); sqlMap.commitTransaction(); } catch (SQLException e) { throw new RemoteException(e.getMessage(), e); } catch (Exception e) { throw new RemoteException(e.getMessage(), e); } finally { try { sqlMap.endTransaction(); } catch (SQLException e) { } }
Nuevamente, definimos una transaccón, llamamos a la operación delete y luego verificamos cuantas filas han sido afectadas.

Esta obra está bajo una licencia de Creative Commons.