Spring StoredProcedure o MyBatis

Buen día,

Necesito invocar Stored Procedures de Oracle desde una aplicación. El uso de SQL no está a discución, no es permitido, absolutamente toda interacción con la BD es mediante SP's Oracle.

Ahora bien, la aplicación está recién iniciada con Spring Boot.

Me gustaría conocer su opinión, cuál sería la mejor forma de trabajar con la invocación de SP's y que sean mapeados rápida y fácilmente a las clases de la aplicación.

Spring con su StoredProcedure o MyBatis, de cualquier forma como les comento la aplicación está sobre Spring Boot.

Si me ayudan con su opinión y una breve explicación de la ventaja que aporta su opción.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Menos dependencias, ¿no?

 

Pues si ya estás usando Spring, sigue usando Spring. Menos dependencias, ¿no?

Store Procedures

Hola winDoctor, Yo no he usado MyBatis pero tengo experiencia con el manejo de Store Procedures, Si ya estas usando Spring, podrías integrar Spring JDBC, que te permite y provee muchas características para un fácil uso de store procedures, Types, Cursores etc. Ademas que te ahorra muucho trabajo por ejemplo con el manejo de excepciones y cierre de sesiones etc, basta con crear tu datasource.

Si necesitas hacer una consulta sencilla para traer cierta información de un catalogo por ejemplo, podrías realizar un cursor y transformarlo en una clase concreta gracias a la Interface RowMapper.

Ejemplo:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Llenas el cursor

SELECT PAIS.ID,
PAIS.NOMBRE,
FROM TABLE_PAIS PAIS;
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Preparas tu SimpleJdbcCall (Contiene la llamara al Store) = spRetrievePais

public void init(){
try{
this.spRetrievePais = new SimpleJdbcCall(this.dataSource)
.withSchemaName(SCHEMA)
.withCatalogName(Package)
.withProcedureName(Procedure)
.withoutProcedureColumnMetaDataAccess().returningResultSet("CURSOR_PAISES",new RowMapper(){
public FunctionDB mapRow(ResultSet rs, int rowNum) throws SQLException {
Pais pais = null;

pais = new Pais(rs.getInt("ID"), rs.getString("NOMBRE"));

return pais;
}})
.declareParameters(
new SqlOutParameter("CURSOR_PAISES",Types.CURSOR),
}catch(Throwable e){
}
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Ejecutas el la llamada al store, y obtenemos la lista de paises

Map<?,?> out = this.spRetrievePais.execute();
List listPaises = ((List)out.get("CURSOR_PAISES"));

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Con este pequeño ejemplo estarías eliminando el uso de SQL directamente desde java, aunque sea ejecutar una sencilla consulta y al mismo tiempo puedes darte cuenta que podrías obtener los datos de una manera fácil.

Espero te haya sido de ayuda.

Saludos!

Imagen de WinDoctor

BeanPropertyRowMapper

Gracias, pero para evitar el mareo manual es mejor usar BeanPropertyRowMapper

JPA

Usar JDBC en Java EE solo, en mi opinion, es para casos de emergencias, eso de usar SP realmente es para persinarse, voltear algunos santos de cabeza, encomendarse a la santa muerte e ir haciendo un testamento, siempre es mejor el buen JPA con JPQL(que no es SQL en la aplicacion, en la mayoria de los casos) y sus consultas nombradas que se comprueban al momento de levantar la aplicación, pero tambien puedes usar JPA en su flamante version 2.1 que acepta SP , ademas creo que la pregunta esta mal formulada, por mera intuicion creo que no puedes comparar Spring com Mybatis asi, aunque nunca lo e usado siempre se compara con Hibernate y si no me equivoco, Spring Boot usa por dentro Hibernate , entonces seria mas bien cambiar Hibernate por MyBatis en SpringBoot.

Saludos