es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo manejar cuando una consulta de MyBatis devuelve null.

Tengo una consulta de MyBatis que devuelve un valor Long dependiendo de un parámetro, pero si el parámetro no existe en la base de datos, devuelve null. Sin embargo, estoy obteniendo esta excepción:

El método de mapeo 'mysqlservermethod' intentó devolver null desde un método con un tipo de retorno primitivo (long).

¿Cómo puedo permitir devolver null o qué otra cosa puedo hacer para controlar en mi parte de Java y hacer algo cuando la consulta devuelve null o que me informe que no hay valores que coinciden con la consulta, sin hacer un select count antes?

Encabezado del select de MyBatis:

resultType="java.lang.Long">
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para permitir que la consulta devuelva null, simplemente puedes cambiar el tipo de retorno en el método de tu mapeador de long primitivo a su clase envolvente Long. Entonces, en lugar de definir el método de esta manera:

    long mysqlservermethod(String parametro);
    

    Puedes cambiarlo a esto:

    Long mysqlservermethod(String parametro);
    

    Esto permitirá que la consulta devuelva un valor null sin lanzar la excepción que mencioniste.

    Para controlar lo que sucede cuando la consulta devuelve un valor null en tu código Java, simplemente puedes verificar el valor null de esta manera:

    Long resultado = mapper.mysqlservermethod(parametro);
    if (resultado != null) {
        // hacer algo con el resultado
    } else {
        // manejar el caso null
    }
    

    De esta manera puedes manejar ambos casos, cuando la consulta devuelve un valor Long válido y cuando devuelve null.

    Alternativamente, si quieres saber si no hay valores que coincidan con la consulta sin hacer una consulta de conteo separada, puedes utilizar la función “coalesce” en tu consulta SQL para devolver un valor no nulo incluso si el valor de la base de datos es null. Puedes modificar tu sentencia select de MyBatis de esta manera:

    SELECT COALESCE(SUM(algun_columna), 0) AS resultado FROM alguna_tabla WHERE parametro = #{parametro}
    

    De esta manera, incluso si no hay filas que coincidan con el parámetro, la consulta seguirá devolviendo un valor Long de 0 en lugar de null.

Comments are closed.