Capítulo 1 Hibernate e Mybatis
Atualmente, o Hibernate é a estrutura de mapeamento O/R mais popular. Nasceu em Sf.net e agora se tornou parte de Jboss. Mybatis é outra excelente estrutura de mapeamento de O/R. Atualmente pertence a um subprojeto do Apache.
Mybatis Referências Site oficial: http://www.mybatis.org/core/zh/index.html
Materiais de referência de hibernato: http://docs.jboss.org/hibernate/core/3.6/reference/zh-cn/html_single/
1.1 Introdução ao Hibernate
O Hibernate fornece um encapsulamento relativamente completo da estrutura do banco de dados. O mapeamento O/R do Hibernate implementa o mapeamento entre as tabelas POJO e o banco de dados, bem como a geração automática e a execução do SQL. Os programadores geralmente precisam definir apenas a relação de mapeamento entre as tabelas POJO e do banco de dados e podem concluir as operações da camada de persistência através dos métodos fornecidos pelo Hibernate. Os programadores nem precisam ser proficientes no SQL. O Hibernate/OJB gerará automaticamente o SQL correspondente e chamará a interface JDBC para executar de acordo com a lógica de armazenamento estabelecida.
1.2 Introdução a Mybatis
O foco da Ibatis está na relação de mapeamento entre Pojo e SQL. Em seguida, mapeando o arquivo de configuração, os parâmetros exigidos pelo SQL e os campos de resultado retornados são mapeados para o POJO especificado. Comparado com o hibernato "O/R", o IBATIS é uma implementação do ORM do "mapeamento SQL".
Capítulo 2 Comparação de desenvolvimento
Velocidade de desenvolvimento
O verdadeiro domínio do hibernato é mais difícil do que Mybatis. A estrutura do mybatis é relativamente simples e fácil de usar, mas também é relativamente simples. Pessoalmente, acho que para usar bem o Mybatis, você deve primeiro entender o Hibernate.
Comunidade de desenvolvimento
Hibernate e Mybatis são estruturas populares de desenvolvimento de camadas de persistência, mas a comunidade de desenvolvimento de hibernato é relativamente animada, suporta muitas ferramentas e as atualizações são mais rápidas. A versão mais alta atual é 4.1.8. Mybatis é relativamente calmo e tem menos ferramentas, e a versão mais alta atual é 3.2.
Carga de trabalho de desenvolvimento
Hibernate e Mybatis têm ferramentas de geração de código correspondentes. Métodos simples e básicos da camada DAO podem ser gerados.
Para consultas avançadas, o Mybatis requer redação manual de instruções SQL e ResultMap. O Hibernate possui um bom mecanismo de mapeamento, portanto, os desenvolvedores não precisam se preocupar com a geração de SQL e o mapeamento de resultados, e podem se concentrar mais nos processos de negócios.
Capítulo 3 Comparação de ajuste do sistema
O plano de ajuste da Hibernate desenvolve uma estratégia de cache razoável;
Tente usar o recurso de carregamento preguiçoso;
Adotar um mecanismo razoável de gerenciamento de sessões;
Use a captura de lote e defina parâmetros de lote razoável (batch_size);
Realize o design de mapeamento O/R razoável
Solução de ajuste mybatis
Mybatis é consistente com o ciclo de vida da sessão do Hibernato em termos de sessão, e também é necessário um mecanismo de gerenciamento de sessão razoável. Mybatis também possui um mecanismo de cache de nível 2. Mybatis pode executar o design detalhado de otimização do SQL.
Aspectos de otimização do SQL
A consulta do Hibernate consultará todos os campos da tabela, o que causará consumo de desempenho. O Hibernate também pode escrever o próprio SQL para especificar os campos que precisam ser consultados, mas isso destrói a simplicidade do desenvolvimento de hibernados. O SQL da Mybatis é escrito manualmente, para que você possa especificar os campos para consulta, conforme necessário.
O ajuste das declarações HQL de hibernato requer impressão de SQL, e muitas pessoas não gostam do SQL de Hibernate porque é muito feio. O SQL da Mybatis é escrito manualmente sozinho, por isso é fácil de ajustar. Mas o Hibernate tem suas próprias estatísticas de log. O próprio Mybatis não contém estatísticas de log e usa log4j para registro.
Escalabilidade
A associação entre hibernato e bancos de dados específicos só precisa ser configurada no arquivo XML. Todas as instruções HQL não têm nada a ver com o banco de dados específico usado e são muito portáteis. Todas as instruções SQL no projeto Mybatis dependem do banco de dados usado, portanto, o suporte para diferentes tipos de banco de dados não é bom.
Capítulo 4 Gerenciamento de objetos e estratégias de rastreamento
Gerenciamento de objetos
O Hibernate é uma solução completa de mapeamento de objeto/relacional que fornece a funcionalidade do gerenciamento de estado de objeto, para que os desenvolvedores não precisem mais prestar atenção aos detalhes do sistema de banco de dados subjacente. Ou seja, comparado aos cenários de camada de persistência JDBC/SQL comuns que exigem gerenciamento de declarações SQL, o Hibernate adota uma perspectiva mais natural orientada a objetos para persistir dados em aplicativos Java.
Em outras palavras, os desenvolvedores que usam hibernato devem sempre prestar atenção ao estado do objeto e não precisam considerar a execução das declarações SQL. Essa parte dos detalhes foi gerenciada pelo Hibernate e apenas os desenvolvedores precisam entender ao ajustar o desempenho do sistema.
O Mybatis não possui documentação nessa área; portanto, os usuários precisam gerenciar os próprios objetos em detalhes.
Estratégia de rastreamento
O hibernato tem um bom mecanismo para os objetos associados à entidade. Para cada relacionamento de associação, pode ser definido em detalhes se deve atrasar o carregamento e quatro modos são fornecidos: rastreamento de associação, rastreamento de consultas, rastejamento de subconsência e rastreamento em lote. É configurado e processado em detalhes.
O carregamento preguiçoso da Mybatis está configurado globalmente.
Capítulo 5 Comparação de mecanismos de cache
Hibernate Cache
O cache do nível 1 do Hibernate é um cache de sessão. Se você faz bom uso do cache do Nível 1, precisará gerenciar bem o ciclo de vida da sessão. Recomenda -se usar uma sessão em uma operação de ação. O cache de nível 1 requer gerenciamento rigoroso da sessão.
O cache do nível 2 do Hibernate é um cache de nível de sessão. O cache do SessionFactory é dividido em cache interno e cache externo. Os dados de armazenamento de cache interno contidos em alguns atributos de coleta do objeto SessionFactory (Dados do elemento de mapeamento e instruções SQL predeterminadas, etc.), que é somente leitura para aplicativos. O cache externo armazena uma cópia dos dados do banco de dados, que são semelhantes ao cache primário. Além de usar a memória como meio de armazenamento, o cache secundário também pode usar dispositivos de armazenamento externos, como discos rígidos. O cache secundário é chamado de cache no nível do processo ou cache de nível de sessão. Pode ser compartilhado por todas as sessões, e seu ciclo de vida existe e desaparece com o ciclo de vida da fábrica de sessão.
Cache mybatis
O Mybatis contém um recurso de cache de consulta muito poderoso que pode ser configurado e personalizado com muita facilidade. Muitas melhorias na implementação do cache no Mybatis 3 foram implementadas, tornando mais poderoso e fácil de configurar.
Por padrão, o cache não está ativado. Além do cache da sessão local, ele pode melhorar a monetização e lidar com dependências circulares também é necessária. 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:
Todas as instruções selecionadas no arquivo de declaração de mapeamento serão armazenadas em cache.
Todas as instruções de inserção, atualização e exclusão no arquivo de declaração de mapeamento atualizam o cache.
O cache será recuperado usando o algoritmo menos usado recentemente (LRU, o menos recentemente usado).
Dependendo do cronograma (como intervalo de descarga, sem intervalo de atualização), o cache não será atualizado em nenhuma ordem cronológica.
O cache armazena 1024 referências a uma coleção ou objeto de lista (independentemente do que o método de consulta retorna).
O cache é 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, economizando 512 referências ao objeto ou lista de resultado, e o objeto retornado é considerado somente leitura, portanto, modificá-los entre os chamadores em diferentes threads levará a conflitos. As estratégias de recuperação disponíveis são, o padrão é LRU:
LRU menos usado recentemente: Remova objetos que não foram usados há mais tempo.
FIFO First-in First-Out: Remova objetos na ordem em que eles entram no cache.
Referência suave e suave: Remove os objetos com base no estado do coletor de lixo e nas regras de referência suave.
Referências fracas fracas: remova mais agressivamente os objetos com base no estado do coletor de lixo e nas regras de referência fracas.
O FlushInterval pode ser definido como qualquer número inteiro positivo e eles representam uma forma de tempo de tempo de milissegundo razoável. 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, lembre -se do 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.
Semelhanças
Além de usar o mecanismo de cache padrão do sistema, os caches secundários de Hibernate e Mybatis podem substituir completamente o comportamento do cache, implementando seu próprio cache ou criando adaptadores para outras soluções de cache de terceiros.
Diferenças
A configuração do cache secundário do Hibernate é configurada em detalhes no arquivo de configuração gerado pelo SessionFactory e, em seguida, é configurado no mapa específico do objeto de tabela.
A configuração de cache secundária da Mybatis é configurada em detalhes em cada mapa específico do objeto de tabela, para que diferentes mecanismos de cache possam ser personalizados para diferentes tabelas. E o Mybatis pode compartilhar a mesma configuração e instância do cache no espaço para nome, que é implementado através do cache-Ref.
Comparação dos dois
Como o Hibernate possui um bom mecanismo de gerenciamento para objetos de consulta, os usuários não precisam se preocupar com o SQL. Portanto, se os dados sujos aparecerem ao usar o cache secundário, o sistema relatará um erro e prompt.
Nesse sentido, o Mybatis requer cuidados especiais ao usar o cache L2. Se o escopo das operações de atualização de dados não puder ser totalmente determinado, evite o uso cego do cache. Caso contrário, a aparência dos dados sujos trará grandes perigos ocultos para a operação normal do sistema.
Capítulo 6 Comparação e resumo do Hibernate e Mybatis
As semelhanças entre os dois
Hibernate e Mybatis podem gerar sessionFactory a partir do arquivo de configuração XML através do SessionFactoryBuider e, em seguida, gerar sessão da SessionFactory e, finalmente, executar transações e instruções SQL. Entre eles, os ciclos de vida de sessõesFactoryBuider, SessionFactory e Session são quase os mesmos.
Hibernate e Mybatis suportam transações JDBC e JTA.
Vantagens mybatis
Mybatis pode executar otimizações SQL mais detalhadas e reduzir os campos de consulta.
Mybatis é fácil de dominar, enquanto o Hibernate tem um limite mais alto.
Vantagens de hibernação
O desenvolvimento da camada DAO da Hibernate é mais simples que o Mybatis, que requer manutenção do SQL e mapeamento de resultados.
O Hibernate mantém e os armazenam em cache melhor que o Mybatis, e é mais conveniente manter objetos adicionados, excluídos, modificados e verificados.
O banco de dados Hibernate possui boa portabilidade, o banco de dados MYBATIS possui baixa portabilidade e diferentes bancos de dados precisam escrever SQL diferentes.
O Hibernate possui um melhor mecanismo de cache L2, que pode usar cache de terceiros. O próprio Mybatis fornece mecanismos de cache ruins.
Outros resumo
O Hibernate possui funções poderosas, boa irrelevância de banco de dados e fortes recursos de mapeamento de O/R. Se você é bastante proficiente em Hibernate e encapsular adequadamente o Hibernate, todo o código da camada de persistência do seu projeto será bastante simples, há muito pouco código para escrever e a velocidade de desenvolvimento é muito rápida e muito legal.
A desvantagem do hibernato é que o limiar de aprendizado não é baixo e você deve ser proficiente nele. Você precisa ter uma forte experiência e capacidade de projetar mapeamento de O/R, como equilibrar o modelo de desempenho e objeto e como usar bem o Hibernate.
O ibatis é simples de começar, aprender e usar, fornece função de ligação de objetos automáticos para consultas de banco de dados e continua com uma boa experiência de uso do SQL. É bastante perfeito para projetos que não possuem requisitos de modelo de objetos tão altos.
A desvantagem dos ibatis é que a estrutura ainda é relativamente simples e as funções ainda estão faltando. Embora o código de ligação de dados seja simplificado, toda a consulta de banco de dados subjacente realmente precisa ser gravada por si só, a carga de trabalho é relativamente grande e não é fácil de se adaptar à modificação rápida do banco de dados.