DEV Community

Edgar Rios Navarro
Edgar Rios Navarro

Posted on • Updated on

MyBatis en tiempos de Java 8-17

Podríamos considerar a MyBatis, como la versión ligera de Hibernate. El cual se mantiene presente y adaptándose a los cambios de Java, en sus últimas versiones.

La versión estable corresponde a 3.5.9.

dependencies {

    implementation 'org.mybatis:mybatis:3.5.9'
    implementation 'com.oracle.database.jdbc:ojdbc8:19.6.0.0'
}
Enter fullscreen mode Exit fullscreen mode

Estos son dos ejemplos que bien deberíamos usarlos, al utilizar MyBatis en nuestros proyectos.

1) Ya no necesitamos cerrar la sesión de forma explícita. Con
Try-With-Resources (Java7) dejamos esa acción a la JVM.
Y al emplear Local-Variable (Java10), hacemos más legible el código.

try (var sqlSession = sqlSessionFactory.openSession()) { //.1
            MapperRecaudacion mapper = sqlSession.getMapper(MapperRecaudacion.class);
            mapper.getTipoCambio3(mapParametros);
            vTipoCambio = (BigDecimal)mapParametros.get("nValorTipoCambio");
        } catch (Exception e) {
            log.error("", e);
        }
Enter fullscreen mode Exit fullscreen mode

2) Para construir la sentencia SQL (el ejemplo corresponde a un SP de Oracle), nos valemos de Text Block (Java15).

    @Select(value = """
            {call #{nValorTipoCambio, mode=OUT, jdbcType=NUMERIC} := 
                FARMA_UTILITY.OBTIENE_TIPO_CAMBIO3(
                    #{cCodGrupoCia_in},#{cCodCia_in},#{cFecCambio_in},#{cTipo})}""") //.2
    @Options(statementType = StatementType.CALLABLE)
    void getTipoCambio3(Map<String, Object> mapParametros);
Enter fullscreen mode Exit fullscreen mode

3) Adicionalmente, podemos reemplazar el operador ternario con Optional (Java8).

        //return vTipoCambio == null?0.0:vTipoCambio.doubleValue();
        return Optional.ofNullable(vTipoCambio)
                .map(BigDecimal::doubleValue)
                .orElse(0.0); //.3
Enter fullscreen mode Exit fullscreen mode

Documentación



Try-With-Resources

JEP 286: Local-Variable Type Inference

JEP 378: Text Blocks

Optional

Discussion (0)