/ / ¿mybatis vacía el caché cuando se ejecuta, selecciona ... para actualizar de forma predeterminada? - primavera, mybatis, spring-mybatis

¿mybatis vacia la caché cuando ejecuta select ... para la actualización de forma predeterminada? - primavera, mybatis, spring-mybatis

Sé que mybatis tiene caché, y se vaciarácaché cuando se ejecuta la actualización de forma predeterminada. Entonces, ¿se vacía el caché cuando se ejecuta, selecciona ... para actualizar? Si la respuesta es no, entonces si ejecuto, seleccione primero, e inmediatamente seguido de ejecutar seleccione ... para actualizar, los mybatis accederán a la base de datos o accederán al caché?

Respuestas

0 para la respuesta № 1

el comportamiento predeterminado del vaciado de la memoria caché no está relacionado con el SQL que se ejecuta realmente, sino con el tipo de Mybatis declaración ejecutada.

Lo que sea el SQL está en <select> o @Select entonces mientras flushCache propiedad no se especifica (en @Options para el estilo de anotación), se aplica el comportamiento por defecto: sin vaciar. y para <update> o @Update el caché se vacía de forma predeterminada.

De todos modos en tu caso, la SELECTy SELECT FOR UPDATE Hay diferentes cadenas SQL, entonces al llamaren ambos casos, la base de datos será afectada por ambos, aunque el conjunto de resultados sea el mismo, la memoria caché asocia las cadenas de SQL y los parámetros al resultado. Cambiar la cadena SQL => nuevo hit, cambiar los parámetros => nuevo hit. Si una declaración <select id=stmt1> y otra declaración <select id=stmt2> producir la misma cadena de SQL y se llama conlos mismos valores de los parámetros, durante la misma sesión y no se produce ninguna operación de descarga entre ellos, entonces la segunda llamada debe llegar al caché. Esto se puede verificar habilitando los registros de depuración en el paquete mapper.namespace.

El caché no funciona como en ORM (Hibernate ...): caché referenciado por tipo de entidad y clave principal.

La caché dura como máximo hasta que finaliza la sesión.

Es conveniente cuando se solicitan los mismos datos.repetidamente (la misma declaración / parámetros) durante una sesión, no es necesario almacenar el resultado para el siguiente uso, simplemente vuelva a llamar a la declaración, el caché solo guardará un acceso a la base de datos para el resultado.