Original: https: //blog.csdn.net/qq_38274974/article/details/100898145
cache de MyBatis em um cache, cache L2
, então, por que deveríamos usar o cache-lo?
E não mudar frequentemente para os dados solicitados com freqüência, se cada consulta deve interagir com o banco de dados, reduzindo assim a eficiência, por isso aqui introduz um cache, alguns pouco e muitas vezes afetam os resultados dos dados de consulta armazenados em memória, reduzindo assim a interacção com o banco de dados para melhorar a eficiência, isto é a vantagem do cache.
Cache
cache é cache de nível SqlSession (suporte de cache padrão, não precisa configurar um cache de perfil), quando a operação do banco de dados, cada instância de um SqlSession classe de objeto uma estrutura de dados (o HashMap ) pode ser usado para armazenar dados da loja, o cache de diferente do exemplo da área de dados SqlSession a classe de objecto (HashMap) é não interagem. Ao realizar as mesmas duas instruções SQL na mesma SqlSession foi terminou em primeiro lugar vai escrever dados para a memória, a segunda consulta não executar sql diretamente da memória.
público classe MyBatisTest { // cache de MyBatis é cache de nível SqlSession apenas um objeto SqlSession. @Test pública vazio test1 () { um SqlSessionFactory SSF = MyBatisUtil.getFactory (); o SqlSession a sessão = ssf.openSession (); UserMapper UM1 = session.getMapper (UserMapper. Classe ); o usuário user1 = um1.selectbyid ( . 1 ); o sistema. OUT .println (user1.getUsername ()); // session.clearCache (); // limpar o cache // Session.commit (); //模拟增删改 UserMapper um2 = session.getMapper (UserMapper. Classe ); Utilizador usuário2 = um2.selectbyid ( 1 ); Sistema. fora .println (user2.getUsername ()); Session.close (); } }
resultados:
Assim, porque o cache, só aconteceu uma vez para interagir com o banco de dados
Como limpar o cache?
Método a: CRUD analógico
session.commit ();
Método dois: Chamada clearcache () Método
session.clearCache ();
E depois de limpar o cache:
cache secundário
SqlSession cache secundário é um mapeador de nível de cache, a uma pluralidade de operar declaração SqlSession mesmo Mapper sql, uma pluralidade de cache secundário podem ser compartilhadas, cache secundário em todo o SqlSession. Para ter acesso ao pedido de consulta de vários usuários e os resultados da consulta menos exigentes em tempo real, desta vez pode usar o MyBatis cache secundário.
1. Inicie
adicionando o arquivo de configuração do núcleo MyBatis-config.xml em
<configurações> <setting name = " cacheEnabled " value = " verdadeiro " /> </ settings>
2. Ligue para a classe de entidade implementar serialização interface
Objeto para implementar a interface de serialização:
· Para os dados buscados para desserialização execução
· interface de marcador, faça um símbolo indica um número de funções, pode haver outras chamadas de objetos funcionais
têm Métodos e número de série, o objeto pode ser serializado em um arquivo binário, pode ser um arquivo binário desserializado em um objeto
3. tags Adicionar Cache no mapper.xml correspondente
4. Teste
@Test pública vazio test2 () { // o MyBatis cache secundário é mapeador de cache de nível, há uma pluralidade de objetos SqlSession. SSF = um SqlSessionFactory MyBatisUtil.getFactory (); o SqlSession session1 = ssf.openSession (); o SqlSession session2 = ssf.openSession (); o SqlSession SESSION3 = ssf.openSession (); UserMapper UM1 = session1.getMapper (. UserMapper classe ); o usuario1 Utilizador um1.selectbyid = ( . 1 ); . o Sistema OUT .println (user1.getUsername ()); session1.close (); UserMapper um2 = session2.getMapper (UserMapper. Classe ); Utilizador usuário2 = um2.selectbyid ( 1 ); Sistema. fora .println (user2.getUsername ()); session2.close (); UserMapper UM3 = session3.getMapper (UserMapper. Classe ); Utilizador usuário3 = um3.selectbyid ( 1 ); Sistema. fora .println (user3.getUsername ()); session3.close (); }
O resultado: