MyBatis 2 de cache

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:

 

Acho que você gosta

Origin www.cnblogs.com/lvchengda/p/12598103.html
Recomendado
Clasificación