1. Introducción al caché de MyBatis
Al igual que la mayoría de los marcos de capa de persistencia, MyBatis también proporciona soporte para los cachés L1 y L2.
1. Cache de nivel 1:
El caché local hashmap basado en perpetualcache tiene un alcance de almacenamiento de sesión. Después de la sesión de la sesión o cierre, se borrarán todos los cachés en la sesión.
2. Cache de nivel 2:
El caché de segundo nivel es el mismo que el caché de primer nivel, y el valor predeterminado es perpetualcache y almacenamiento hashmap. La diferencia es que su alcance de almacenamiento es Mapper (espacio de nombres), y puede personalizar la fuente de almacenamiento, como Ehcache.
3. Para el mecanismo de actualización de datos de caché , cuando se realiza un cierto alcance (sesión de nombres de caché de caché de primer nivel), todos los cachés en Selects bajo este alcance se borrarán de forma predeterminada.
1.1. Prueba de caché de MyBatis Nivel 1
paquete me.gacl.test; import me.gacl.domain.user; import me.gacl.util.mybatisutil; importar org.apache.ibatis.session.sqlsession; import org.junit.test;/*** @author gacl*test first-selvel cache*/public class testonelelcache {** nivel 1 cache (session CACE predeterminado)*/@testPublic void testCache () {sqlsession session = myBatisUtil.getSqlSession (); string statcle = "me.gacl.mapping.usermapper.getuser"; user user = session.selectone (statcaty,); system.out.println (user);/** El primer nivel se utilizará por default*/usuarios de usuarios. ); System.out.println (usuario); session.close ();/*. Debe ser la misma sesión. Si el objeto de sesión se ha cerrado (), es imposible usarlo */session = myBatisUtil.getSqlSession (); user = session.selectone (declaración,); system.out.println (user);/ *. Las condiciones de consulta son las mismas */user = session.selectone (declaración,); system.out.println (usuario);/ *. No se ha ejecutado session.clearcache () para limpiar el caché*/// session.clearcache (); user = session.selectone (declaración,); system.out.println (usuario);/*. No se han ejecutado operaciones ADD/DELETE (estas operaciones limpiarán el caché)*/session.update ("me.gacl.mapping.usermapper.updateuser", new user (, "user",)); user = session.selectone (declaración,); system.out.println (user);}} 1.2. Prueba de caché de MyBatis Nivel 2
1. Encienda el caché secundario y agregue la siguiente configuración al archivo usermapper.xml
<mapper namespace = "me.gacl.mapping.usermapper"> <!-activar el caché de nivel 2-> <cache/>
2. Prueba el caché secundario
package me.gacl.test;import me.gacl.domain.User;import me.gacl.util.MyBatisUtil;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.junit.Test;/*** @author gacl* Test Level 2 cache*/public class TestTWolevelCache {/** Test Nivel 2 Cache* Use dos objetos SQLSession diferentes para ejecutar consultas con las mismas condiciones de consulta. Las declaraciones SQL no se enviarán durante la segunda consulta, pero los datos se obtienen directamente de la caché*/@testPublic void testCache () {string statte = "me.gacl.mapping.usermapper.getuser"; sqlsessionFactory factory = myBatisutil.getSqlSessionFactory (); // abre dos diferentes sqlsessionssessionssessionsessession session = factory.opensession (); sqlsession session = factory.opensession (); // Cuando se usa caché secundario, la clase de usuario debe implementar una interfaz serializable ===> El usuario implementa serializableuser user = session.selectone (declaración,); session.commit (); // No entiendo por qué, este lugar debe enviarse después de la transacción se envía antes de que se envíe la cierta caña de nivel de nivel de nivel. System.out.println ("user ="+user); // Porque se usan dos objetos SQLSession diferentes, incluso si las condiciones de consulta son las mismas, el caché de primer nivel no estará habilitado. user = session.selectone (declaración,); // session.commit (); system.out.println ("user ="+user);}} 1.3. Instrucciones complementarias para caché secundario
1. Todas las declaraciones de selección en el archivo de la declaración de asignación se almacenarán en caché.
2. Mapee todo lo que inserte, actualice y elimine las declaraciones en el archivo de instrucción actualizará el caché.
3. El caché se volverá a jugar con el algoritmo menos utilizado recientemente (LRU, el menos recientemente usado).
4. El caché se actualizará de acuerdo con el intervalo de tiempo especificado.
5. El caché almacenará 1024 objetos
Propiedades comunes de las etiquetas de caché:
<Cache Eviction = "FIFO" <!-La estrategia de reciclaje es primero en, primer-out-> flushInterval = "60000" <!-Tiempo automático de actualización 60s-> size = "512" <!-ESTACIMIENTO DE CACHA UNA 512 OBJETOS DE REFER
Te daré algo de conocimiento:
Como hibernado, mybatis también tiene un mecanismo de caché
El caché de nivel 1 se basa en el caché local hashmap de perpetualcache (mybatis viene) y su alcance es la sesión, por lo que cuando la sesión se confirma o cierre, se borrará el caché.
El caché de segundo nivel también se basa en PerpetualCache de forma predeterminada, pero se puede usar para crear fuentes de almacenamiento, como Ehcache.
El caché de primer nivel almacena las declaraciones SQL, mientras que el caché de segundo nivel almacena en caché del objeto de resultado. Vea el siguiente ejemplo (el nivel de registro de MyBatis está configurado para depurar)