[MyBatis estereotipado] Perguntas da entrevista 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.

Acho que você gosta

Origin blog.csdn.net/qq_44033208/article/details/132409109
Recomendado
Clasificación