MyBatis 3 – llamadas a stores

Posted: 10th November 2016 by Jak in j2ee, Java, MyBatis

Como sabrán este framework es muy fácil de usar, pero a veces tiene sus complejidades, una de ellas es la forma en que se deben mapear los objetos cuando se llama a un store. He aqui un ejemplo:

Estamos usando DAOS y los mapeos son atraves de XML.

Primero en el mapper tenemos.

resultOrder es el objeto resultado que se asocia al cursor, mapea los campos de listado que regresa el cursor con el modelo, en este caso el modelo es Order, por lo cual es una lista de orders.

En la llamada al store es importante poner los tipos de datos que ocupan los parametros de entrada y de salida, sino marcara un error.

Ahora para que la magia suceda, el tipo de entrada debe tener los parametros de entrada y salida que ocupe el store, en este caso es SpOrdersInput.


<mapper namespace="mappers">

 <resultMap id="resultOrder" type="Order">
 <result column="FIELD1" property="prop1" />
 <result column="FIELD2" property="prop2" />
ns" />
etc...
 </resultMap>

 <select id="callGetOrders" parameterType="SpOrdersInput" statementType="CALLABLE">
 { CALL SP(#{num, mode=IN, jdbcType=NUMERIC},
 #{user, mode=IN, jdbcType=VARCHAR},
 #{list, mode=OUT, jdbcType=CURSOR, javaType=java.sql.ResultSet, resultMap=resultOrder},
 #{code, mode=OUT, jdbcType=NUMERIC},
 #{error, mode=OUT, jdbcType=VARCHAR}) }
 </select>

</mapper>


public class SpOrdersInput {

 private int num;
 private String user;
 private List<Order> list;
 private Integer code;
 private String error;

Ahora para obtener la lista en el metodo del DAO


public SpOrdersOuput getOrdersByCard(SpOrdersInput input){
 SqlSession session = getSession();
 SpOrdersOuput result = new SpOrdersOuput();

 try {
 session.selectOne("mappers.callGetOrders", input);
 List<Order> list = (List<Order>) input.getList();

 result.setOrders(list);
 result.setCode(input.getCode());
 result.setError(input.getError());

Con esto ya pueden iterar su lista y obtener los registros….

Y recuerden…

“Nunca dejen de programar….”

Share