Índice
-
- O que é MyBatis?
- Prós e contras do Mybaits?
- Por que Mybatis é uma ferramenta de mapeamento ORM semiautomática? Qual é a diferença entre ele e totalmente automático?
- Diferença entre Hibernate e MyBatis?
- Quais são as deficiências da programação JDBC e como o MyBatis resolve esses problemas?
- Quais são as etapas de programação do MyBatis?
- A diferença entre #{} e ${}?
- Normalmente, um arquivo de mapeamento XML escreverá uma interface Dao correspondente a ele, então qual é o princípio de funcionamento desta interface Dao? Quando os métodos e parâmetros na interface Dao são diferentes, os métodos podem ser sobrecarregados?
- Como passar vários parâmetros no Mapper?
- Qual é a utilidade do sql dinâmico Mybatis? Qual é o princípio de execução? Que tipo de SQL dinâmico?
- No arquivo de mapeamento xml, diferentes IDs de arquivo de mapeamento xml podem ser repetidos?
- De quantas maneiras o Mybatis implementa um para um? Como funciona?
- De quantas maneiras o Mybatis implementa um para muitos? Como funciona?
- Quais são os caches de primeiro e segundo nível do Mybatis?
- Quais são os requisitos ao chamar a interface Mapper do MyBatis?
O que é MyBatis?
- Mybatis é uma estrutura semi-ORM (mapeamento objeto-relacional) , que encapsula JDBC, carrega drivers, cria conexões, cria instruções e outros processos complicados. Os desenvolvedores só precisam prestar atenção em como escrever instruções SQL durante o desenvolvimento e podem controlar estritamente Desempenho de execução SQL.Alta flexibilidade.
- Como uma estrutura semi-ORM, MyBatis pode usar XML ou anotações para configurar e mapear informações nativas, mapear POJOs em registros no banco de dados e evitar quase todos os códigos JDBC e configuração manual de parâmetros e obtenção de conjuntos de resultados.
- Configure as várias instruções a serem executadas por meio de arquivos XML ou anotações e gere a instrução SQL final executada mapeando o objeto Java e os parâmetros dinâmicos do SQL na instrução.Finalmente, a estrutura Mybatis executa o SQL e mapeia o resultado para um Java objeto e retorno. (O processo desde a execução do SQL até o retorno do resultado).
- Como o MyBatis se concentra no próprio SQL e tem alta flexibilidade, ele é mais adequado para projetos com requisitos de alto desempenho ou requisitos variáveis, como projetos de Internet.
Prós e contras do Mybaits?
vantagem:
- Baseado na programação de instruções SQL, é bastante flexível e não terá qualquer impacto no design existente do programa aplicativo ou banco de dados. O SQL é escrito em XML, o que separa o sql do código do programa e facilita o gerenciamento unificado; tags XML são fornecidas para suporta a escrita de instruções SQL dinâmicas e pode ser reutilizado.
- Comparado ao JDBC, reduz a quantidade de código em mais de 50%, elimina um grande número de códigos redundantes de JDBC e não requer conexão manual de switch;
- Compatibilidade muito boa com vários bancos de dados (porque MyBatis usa JDBC para se conectar ao banco de dados, desde que o banco de dados MyBatis suporte JDBC).
- Pode ser bem integrado ao Spring;
- Fornece tags de mapeamento para dar suporte ao mapeamento de relacionamento de campo ORM entre objetos e bancos de dados; fornece tags de mapeamento objeto-relacional para dar suporte à manutenção de componentes objeto-relacionais.
deficiência:
- A carga de trabalho de escrever instruções SQL é relativamente grande, especialmente quando há muitos campos e muitas tabelas associadas, existem certos requisitos para os desenvolvedores escreverem instruções SQL.
- As instruções SQL dependem do banco de dados, resultando em baixa portabilidade do banco de dados, e o banco de dados não pode ser substituído à vontade.
Por que Mybatis é uma ferramenta de mapeamento ORM semiautomática? Qual é a diferença entre ele e totalmente automático?
Hibernate é uma ferramenta de mapeamento ORM totalmente automática . Ao usar o Hibernate para consultar objetos associados ou objetos de coleção associados, ele pode ser obtido diretamente de acordo com o modelo de relacionamento de objetos, portanto, é totalmente automático.
Quando Mybatis consulta objetos associados ou objetos de coleção associados, ele precisa escrever SQL manualmente para ser concluído, por isso é chamado de ferramenta de mapeamento ORM semiautomática .
Diferença entre Hibernate e MyBatis?
O mesmo ponto : todos são encapsulamento de Jdbc, ambos são frameworks da camada de persistência e ambos são utilizados para o desenvolvimento da camada Dao.
diferença
-
Relacionamento de mapeamento
MyBatis é uma estrutura de mapeamento semiautomática , que configura o relacionamento correspondente entre objetos Java e resultados de execução de instruções SQL, e a configuração da associação de múltiplas tabelas é simples.
Hibernate é uma estrutura completa de mapeamento de tabelas , que configura a correspondência entre objetos Java e tabelas de banco de dados, e a configuração de associações de múltiplas tabelas é complexa. -
Otimização e portabilidade de SQL
O Hibernate encapsula instruções SQL, fornece recursos como registro, cache e cascata (o cascata é mais poderoso que MyBatis) e também fornece HQL (Hibernate Query Language) para operar o banco de dados. O banco de dados tem um bom suporte para independência, mas haverá mais consumo de desempenho. Se o projeto precisar suportar vários bancos de dados, a quantidade de desenvolvimento de código será pequena, mas será difícil otimizar as instruções SQL.
MyBatis precisa escrever SQL manualmente, oferece suporte a SQL dinâmico, lida com listas, gera nomes de tabelas dinamicamente e oferece suporte a procedimentos armazenados. A carga de trabalho de desenvolvimento é relativamente grande. Use diretamente a instrução SQL para operar o banco de dados, não oferece suporte à independência do banco de dados, mas a otimização da instrução SQL é fácil. -
Dificuldade de desenvolvimento e custo de aprendizado
O Hibernate é uma estrutura pesada com alto limite de aprendizado e uso. É adequado para requisitos relativamente estáveis e projetos de pequeno e médio porte, como sistemas de automação de escritório. MyBatis é uma estrutura leve com baixas barreiras de aprendizagem e uso, adequada para projetos de grande escala com mudanças frequentes de requisitos, como sistemas de comércio eletrônico na Internet.
Resumo : MyBatis é uma estrutura de camada de persistência pequena, conveniente, eficiente, simples, direta e semiautomática, e Hibernate é uma estrutura de camada de persistência poderosa, conveniente, eficiente, complexa, indireta e totalmente automatizada.
Quais são as deficiências da programação JDBC e como o MyBatis resolve esses problemas?
1. A criação e liberação freqüentes de links de banco de dados causam desperdício de recursos do sistema e afetam o desempenho do sistema.Se você usar um pool de links de banco de dados, esse problema poderá ser resolvido.
Solução: Configure o pool de conexões de dados em SqlMapConfig.xml e use o pool de conexões para gerenciar a conexão do banco de dados.
2. As instruções SQL são escritas no código, tornando o código difícil de manter. A aplicação real do SQL pode mudar muito. As mudanças no SQL precisam alterar o código Java.
Solução: Separe a configuração da instrução SQL do código Java no arquivo XXXXmapper.xml.
3. É problemático passar parâmetros para a instrução SQL, porque a condição where da instrução SQL não é necessariamente certa, pode haver mais ou menos e os espaços reservados precisam corresponder aos parâmetros um por um.
Solução: Mybatis mapeia automaticamente objetos Java para instruções SQL.
4. A análise do conjunto de resultados é complicada. Mudanças no SQL levam a mudanças no código de análise e precisam ser percorridas antes da análise. É mais conveniente analisar os registros do banco de dados em objetos POJO.
Solução: Mybatis mapeia automaticamente os resultados da execução SQL para objetos Java.
Quais são as etapas de programação do MyBatis?
- 1. Crie SqlSessionFactory
- 2. Crie SqlSession por meio de SqlSessionFactory
- 3. Execute operações de banco de dados por meio de sqlsession
- 4. Chame session.commit() para confirmar a transação
- 5. Chame session.close() para fechar a sessão
A diferença entre #{} e ${}?
[Espaço reservado MyBatis] A diferença entre #{} e ${} em Mybatis
Normalmente, um arquivo de mapeamento XML escreverá uma interface Dao correspondente a ele, então qual é o princípio de funcionamento desta interface Dao? Quando os métodos e parâmetros na interface Dao são diferentes, os métodos podem ser sobrecarregados?
A interface Dao é a interface Mapper. O nome completo da interface é o valor do namespace no arquivo de mapeamento;
o nome do método da interface é o valor de id da instrução Mapper no arquivo de mapeamento;
os parâmetros no método de interface são os parâmetros passados para SQL.
A interface Mapper não possui classe de implementação. Ao chamar o método da interface, a string concatenada do nome completo da interface + nome do método é usada como o valor da chave, que pode localizar exclusivamente um MapperStatement.
O método na interface Dao não pode ser sobrecarregado, pois é a estratégia de armazenamento e busca do nome completo + nome do método.
O princípio de funcionamento da interface Dao é o proxy dinâmico JDK. Mybatis usará o proxy dinâmico JDK para gerar um objeto proxy proxy para a interface Dao durante o tempo de execução. O proxy do objeto proxy interceptará o método de interface, executará o SQL representado pelo MappedStatement e, em seguida, retorne o resultado da execução SQL.
Como passar vários parâmetros no Mapper?
-
Se a função da camada Dao tiver vários parâmetros, no XML correspondente, #{0} representa o primeiro parâmetro na camada Dao, #{1} representa o segundo parâmetro no Dao e assim por diante.
-
Use a anotação @Param: adicione a anotação @Param antes dos parâmetros da camada Dao, e o nome do parâmetro na anotação é o nome do parâmetro passado ao mapeador.
-
Vários parâmetros são encapsulados no Map e passados para o Mapper na forma de HashMap.
Qual é a utilidade do sql dinâmico Mybatis? Qual é o princípio de execução? Que tipo de SQL dinâmico?
O SQL dinâmico Mybatis pode escrever SQL dinâmico na forma de tags no arquivo de mapeamento XML. O princípio de execução é completar o julgamento lógico com base no valor da expressão e unir dinamicamente a função SQL.
Mybatis fornece 9 tags SQL dinâmicas: trim, where, set, foreach, if, choose, quando, caso contrário, bind
Seu princípio de execução é usar OGNL (Object Graph Navigation Language) para calcular o valor da expressão do objeto de parâmetro SQL e unir dinamicamente o sql de acordo com o valor da expressão para completar a função do sql dinâmico.
No arquivo de mapeamento xml, diferentes IDs de arquivo de mapeamento xml podem ser repetidos?
Arquivos de mapeamento XML diferentes, se o namespace estiver configurado, o id pode ser repetido; se o namespace não estiver configurado, o id não pode ser repetido; o
motivo é que o namespace + id é Map<String,MapperStatement>
usado como chave, se não houver namespace, resta apenas o id, então o id é repetido. Os dados serão sobrescritos uns aos outros. Com o namespace, o id pode ser repetido naturalmente, e o namespace+id é naturalmente diferente se o namespace for diferente.
De quantas maneiras o Mybatis implementa um para um? Como funciona?
Existem duas formas de consulta conjunta e consulta aninhada. Uma consulta conjunta é uma consulta conjunta de várias tabelas, que pode ser concluída configurando o nó de associação
no resultMap para configurar uma classe um para um; a consulta aninhada consiste em verificar primeiro uma tabela e depois ir para outra de acordo com o id da chave estrangeira do resultado nesta tabela Os dados da consulta na tabela também são configurados por associação, mas a consulta de outra tabela é configurada por seleção.
De quantas maneiras o Mybatis implementa um para muitos? Como funciona?
Existem duas formas de consulta conjunta e consulta aninhada.
Uma consulta conjunta é uma consulta conjunta de várias tabelas e só é consultada uma vez. Ela pode ser concluída configurando uma classe um para muitos no nó de coleção
no resultMap; uma consulta aninhada serve para verificar uma tabela primeiro e de acordo com o id da chave estrangeira do resultado desta tabela, depois vai para outra tabela para consultar os dados, também através de coleta, mas a consulta de outra tabela é configurada através de select.
Quais são os caches de primeiro e segundo nível do Mybatis?
- 1. Cache de nível 1: cache local HashMap baseado em PerpetualCache, seu escopo de armazenamento é Sessão, quando a Sessão é liberada ou fechada, todo o Cache na Sessão será limpo e o cache de nível 1 é habilitado por padrão.
- 2. O cache de segundo nível é igual ao mecanismo de cache de primeiro nível. O padrão é usar o armazenamento PerpetualCache e HashMap. A diferença é que seu escopo de armazenamento é Mapper (namespace), e a fonte de armazenamento pode ser personalizada, como como Ehcache. O cache de segundo nível não é habilitado por padrão. Para habilitar o cache de segundo nível, o uso da classe de atributo de cache de segundo nível precisa implementar a interface de serialização Serializable (que pode ser usada para salvar o estado do objeto), que pode ser configurado em seu arquivo de mapeamento.
Para o mecanismo de atualização de dados de cache, quando um determinado escopo (sessão de cache de primeiro nível/namespace de cache de segundo nível) é adicionado/excluído/modificado, todos os caches selecionados neste escopo serão limpos por padrão.
Quais são os requisitos ao chamar a interface Mapper do MyBatis?
- 1. O nome do método da interface do Mapper é igual ao id de cada SQL definido em mapper.xml;
- 2. O tipo de parâmetro de entrada do método de interface Mapper é igual ao tipo de parâmetroType de cada SQL definido em mapper.xml;
- 3. O tipo de parâmetro de saída do método de interface Mapper é igual ao resultType de cada SQL definido em mapper.xml;
- 4. O namespace no arquivo Mapper.xml é o caminho de classe da interface do mapeador.