O Mybatis contém um recurso de cache de consulta muito poderoso que pode ser configurado e personalizado com muita facilidade. Por padrão, o cache não está ativado. Para ativar o cache do nível 2, você precisa adicionar uma linha ao seu arquivo de mapeamento SQL:
<cache/>
É isso literalmente. O efeito desta afirmação simples é a seguinte:
1. Todas as instruções selecionadas no arquivo de declaração de mapeamento serão armazenadas em cache.
2. Mapeie todas as instruções de inserção, atualização e exclusão no arquivo de instrução atualizará o cache.
3. O cache será julgado usando o algoritmo menos usado recentemente (LRU, o menos recentemente usado).
4. De acordo com o cronograma (como intervalo de descarga, sem intervalo de atualização), o cache não será atualizado em nenhuma ordem cronológica.
5. O cache armazena 1024 referências a uma coleção ou objeto de lista (independentemente do que o método de consulta retorna).
6. O cache será considerado um cache de leitura/gravação (legível/gravável), o que significa que a recuperação do objeto não é compartilhada e pode ser modificada com segurança pelo chamador sem interferir em possíveis modificações feitas por outros chamadores ou threads.
Todas essas propriedades podem ser modificadas pelas propriedades dos elementos de cache. por exemplo:
<cache despettion = "fifo" flushinterval = "60000" size = "512" readOnly = "true"/>
Essa configuração mais avançada cria um cache do FIFO e atualiza a cada 60 segundos, armazenando 512 referências ao objeto ou lista de resultado, e o objeto retornado é considerado somente leitura, portanto, modificando-os entre os chamadores em diferentes threads resulta em conflitos.
As estratégias de recuperação disponíveis são:
O padrão é LRU.
O FlushInterval pode ser definido como qualquer número inteiro positivo e eles representam um período de tempo razoável de milissegundos. O padrão não está definido, ou seja, não há intervalo de atualização e o cache é atualizado apenas quando a instrução é chamada.
O tamanho (número de referências) pode ser definido como qualquer número inteiro positivo, lembrando o número de objetos que você armazena em cache e o número de recursos de memória disponíveis em seu ambiente de corrida. O valor padrão é 1024.
A propriedade READONLY pode ser definida como true ou falsa. Um cache somente leitura retorna a mesma instância do objeto de cache para todos os chamadores. Portanto, esses objetos não podem ser modificados. Isso fornece vantagens importantes de desempenho. Um cache legível e escrito retorna uma cópia do objeto de cache (por serialização). Isso será mais lento, mas seguro, por isso é falso por padrão.
Usando cache personalizado
Além desses métodos de cache personalizados, você também pode substituir completamente o comportamento do cache implementando seu próprio cache ou criando adaptadores para outros cenários de cache de terceiros.
<cache tipo = ”com.Domain.something.mycustomcache”/>
Este exemplo mostra como usar uma implementação de cache personalizada. A classe especificada pelo atributo de tipo deve implementar a interface org.mybatis.cache.cache. Essa interface é uma das muitas interfaces complexas na estrutura Mybatis, mas é bom simplesmente dar o que faz.
Cache de interface pública {string getId (); int getSize (); void putObject (chave do objeto, valor do objeto); Objeto getObject (chave do objeto); Boolean Haskey (chave do objeto); Objeto RemowObject (chave do objeto); void clear (); ReadWritelock getReadWritelock (); } Cache de referência
Talvez em algum momento no futuro, você queira compartilhar a mesma configuração de cache e instâncias no espaço para nome. Nesse caso, você pode usar o elemento Cache-Ref para fazer referência a outro cache.
<cache-ref namespace = ”com.omeone.application.data.somemapper”/>