[MyBatis stéréotypé] Questions d'entretien MyBatis

Qu'est-ce que MyBatis ?

  • Mybatis est un framework semi-ORM (object-relational mapping) , qui encapsule JDBC, charge les pilotes, crée des connexions, crée des instructions et d'autres processus compliqués. Les développeurs n'ont qu'à prêter attention à la façon d'écrire des instructions SQL lors du développement et peuvent contrôler strictement Performances d'exécution SQL.Grande flexibilité.
  • En tant que framework semi-ORM, MyBatis peut utiliser XML ou des annotations pour configurer et mapper les informations natives, mapper les POJO dans les enregistrements de la base de données et éviter presque tous les codes JDBC et la configuration manuelle des paramètres et l'obtention d'ensembles de résultats.
  • Configurez les différentes instructions à exécuter via des fichiers XML ou des annotations, et générez l'instruction SQL finale exécutée en mappant l'objet Java et les paramètres dynamiques de SQL dans l'instruction. Enfin, le framework Mybatis exécute le SQL et mappe le résultat à un Java objet et retour. (Le processus depuis l'exécution de SQL jusqu'au retour du résultat).
  • Étant donné que MyBatis se concentre sur SQL lui-même et offre une grande flexibilité, il est plus adapté aux projets ayant des exigences de performances élevées ou des exigences changeantes, tels que les projets Internet.

Avantages et inconvénients de Mybaits ?

avantage:

  • Basé sur la programmation d'instructions SQL, il est assez flexible et n'aura aucun impact sur la conception existante du programme d'application ou de la base de données. SQL est écrit en XML, ce qui dissocie SQL du code du programme et facilite une gestion unifiée ; des balises XML sont fournies pour prend en charge l'écriture d'instructions SQL dynamiques et peut être réutilisée.
  • Par rapport à JDBC, il réduit la quantité de code de plus de 50 %, élimine un grand nombre de codes redondants de JDBC et ne nécessite pas de connexion manuelle du commutateur ;
  • Très bonne compatibilité avec diverses bases de données (car MyBatis utilise JDBC pour se connecter à la base de données, donc tant que la base de données MyBatis prend en charge JDBC).
  • Peut être bien intégré à Spring ;
  • Fournissez des balises de mappage pour prendre en charge le mappage des relations de champ ORM entre les objets et les bases de données ; fournissez des balises de mappage objet-relationnel pour prendre en charge la maintenance des composants objet-relationnel.

défaut:

  • La charge de travail liée à l'écriture d'instructions SQL est relativement importante, en particulier lorsqu'il existe de nombreux champs et de nombreuses tables associées. Il existe certaines exigences pour que les développeurs écrivent des instructions SQL.
  • Les instructions SQL dépendent de la base de données, ce qui entraîne une mauvaise portabilité de la base de données et la base de données ne peut pas être remplacée à volonté.

Pourquoi Mybatis est-il un outil de cartographie ORM semi-automatique ? Quelle est la différence entre celui-ci et le système entièrement automatique ?

Hibernate est un outil de cartographie ORM entièrement automatique.Lorsque vous utilisez Hibernate pour interroger des objets associés ou des objets de collection associés, il peut être directement obtenu selon le modèle de relation d'objet, il est donc entièrement automatique.
Lorsque Mybatis interroge des objets associés ou des objets de collection associés, il doit écrire manuellement du SQL pour terminer, c'est pourquoi on l'appelle un outil de mappage ORM semi-automatique .

Différence entre Hibernate et MyBatis ?

Même point : ce sont tous des encapsulations de Jdbc, tous deux sont des frameworks de la couche persistance, et tous deux sont utilisés pour le développement de la couche Dao.

différence

  • Relation de mappage
    MyBatis est un framework de mappage semi-automatique , qui configure la relation correspondante entre les objets Java et les résultats d'exécution des instructions SQL, et la configuration de l'association multi-table est simple.
    Hibernate est un framework de mappage de tables complet , qui configure la correspondance entre les objets Java et les tables de base de données, et la configuration des associations multi-tables est complexe.

  • Optimisation SQL et portabilité
    Hibernate encapsule les instructions SQL, fournit des fonctionnalités telles que la journalisation, la mise en cache et la mise en cascade (la mise en cascade est plus puissante que MyBatis), et fournit également HQL (Hibernate Query Language) pour faire fonctionner la base de données. La base de données prend bien en charge l'indépendance, mais il y aura plus de performances consommées. Si le projet doit prendre en charge plusieurs bases de données, la quantité de développement de code est faible, mais il est difficile d'optimiser les instructions SQL.
    MyBatis doit écrire manuellement du SQL, prend en charge le SQL dynamique, gère les listes, génère dynamiquement des noms de table et prend en charge les procédures stockées. La charge de travail de développement est relativement importante. Utiliser directement l'instruction SQL pour faire fonctionner la base de données, ne prend pas en charge l'indépendance de la base de données, mais l'optimisation des instructions SQL est facile.

  • Difficulté de développement et coût d'apprentissage
    Hibernate est un framework lourd avec un seuil d'apprentissage et d'utilisation élevé. Il convient aux exigences relativement stables et aux projets de petite et moyenne taille, tels que les systèmes bureautiques. MyBatis est un framework léger avec peu d'obstacles à l'apprentissage et à l'utilisation. Il convient aux projets à grande échelle avec des changements fréquents d'exigences, tels que les systèmes de commerce électronique sur Internet.

Résumé : MyBatis est un framework de couche de persistance petit, pratique, efficace, simple, direct et semi-automatisé, et Hibernate est un framework de couche de persistance puissant, pratique, efficace, complexe, indirect et entièrement automatisé.

Quelles sont les lacunes de la programmation JDBC et comment MyBatis résout-il ces problèmes ?

1. La création et la libération fréquentes de liens de base de données entraînent un gaspillage des ressources système et affectent les performances du système. Si vous utilisez un pool de liens de base de données, ce problème peut être résolu.

Solution : configurez le pool de connexions de données dans SqlMapConfig.xml et utilisez le pool de connexions pour gérer la connexion à la base de données.

2. Les instructions SQL sont écrites dans le Code, ce qui rend le Code difficile à maintenir. L'application réelle de SQL peut changer considérablement. Les modifications SQL nécessitent une modification du code Java.

Solution : Séparez la configuration de l'instruction SQL du code Java dans le fichier XXXXmapper.xml.

3. Il est difficile de transmettre des paramètres à l'instruction SQL, car la condition Where de l'instruction SQL n'est pas nécessairement certaine, il peut y en avoir plus ou moins et les espaces réservés doivent correspondre aux paramètres un par un.

Solution : Mybatis mappe automatiquement les objets Java aux instructions SQL.

4. L'analyse du jeu de résultats est fastidieuse. Les modifications apportées à SQL entraînent des modifications dans le code d'analyse, qui doit être parcouru avant l'analyse. Il est plus pratique d'analyser les enregistrements de la base de données dans des objets POJO.

Solution : Mybatis mappe automatiquement les résultats de l'exécution SQL aux objets Java.

Quelles sont les étapes de programmation MyBatis ?

  • 1. Créer SqlSessionFactory
  • 2. Créez SqlSession via SqlSessionFactory
  • 3. Effectuer des opérations de base de données via sqlsession
  • 4. Appelez session.commit() pour valider la transaction
  • 5. Appelez session.close() pour fermer la session

La différence entre #{} et ${} ?

[espace réservé MyBatis] La différence entre #{} et ${} dans Mybatis

Habituellement, un fichier de mappage XML écrira une interface Dao qui lui correspond, alors quel est le principe de fonctionnement de cette interface Dao ? Lorsque les méthodes et les paramètres de l’interface Dao sont différents, les méthodes peuvent-elles être surchargées ?

L'interface Dao est l'interface Mapper. Le nom complet de l'interface est la valeur de l'espace de noms dans le fichier de mappage ;
le nom de la méthode de l'interface est la valeur id de l'instruction Mapper dans le fichier de mappage ;
les paramètres de la méthode d'interface sont les paramètres transmis à SQL.
L'interface Mapper n'a pas de classe d'implémentation.Lorsque la méthode d'interface est appelée,la chaîne concaténée du nom complet de l'interface + nom de la méthode est utilisée comme valeur clé,qui peut localiser de manière unique un MapperStatement.

La méthode de l'interface Dao ne peut pas être surchargée, car il s'agit de la stratégie de stockage et de recherche du nom complet + nom de la méthode.
Le principe de fonctionnement de l'interface Dao est le proxy dynamique JDK. Mybatis utilisera le proxy dynamique JDK pour générer un objet proxy proxy pour l'interface Dao pendant l'exécution. Le proxy d'objet proxy interceptera la méthode d'interface, exécutera le SQL représenté par MappedStatement. , puis renvoie le résultat de l'exécution SQL.

Comment passer plusieurs paramètres dans Mapper ?

  • Si la fonction de couche Dao a plusieurs paramètres, alors dans le XML correspondant, #{0} représente le premier paramètre de la couche Dao, #{1} représente le deuxième paramètre du Dao, et ainsi de suite.

  • Utilisez l'annotation @Param : ajoutez l'annotation @Param avant les paramètres de la couche Dao, et le nom du paramètre dans l'annotation est le nom du paramètre transmis au Mappeur.

  • Plusieurs paramètres sont encapsulés dans Map et transmis à Mapper sous la forme de HashMap.

A quoi sert le SQL dynamique Mybatis ? Quel est le principe d'exécution ? Quel genre de SQL dynamique ?

Mybatis Dynamic SQL peut écrire du SQL dynamique sous forme de balises dans le fichier de mappage XML.Le principe d'exécution est de compléter le jugement logique basé sur la valeur de l'expression et de fusionner dynamiquement la fonction SQL.

Mybatis fournit 9 balises SQL dynamiques : trim,where, set, foreach, if, Choose, when, else, bind

Son principe d'exécution est d'utiliser OGNL (Object Graph Navigation Language) pour calculer la valeur de l'expression à partir de l'objet paramètre SQL, et d'épisser dynamiquement sql en fonction de la valeur de l'expression pour compléter la fonction de sql dynamique.

Dans le fichier de mappage XML, différents ID de fichier de mappage XML peuvent-ils être répétés ?

Différents fichiers de mappage XML, si l'espace de noms est configuré, l'identifiant peut être répété ; si l'espace de noms n'est pas configuré, l'identifiant ne peut pas être répété ; la
raison est que l'espace de noms + id est Map<String,MapperStatement>utilisé comme clé, s'il n'y a pas d'espace de noms, il ne reste que l'identifiant, puis l'identifiant est répété. Les données s'écraseront les unes les autres. Avec l'espace de noms, l'identifiant peut être répété naturellement, et l'espace de noms+id est naturellement différent si l'espace de noms est différent.

De combien de manières Mybatis met-il en œuvre le one-to-one ? Comment ça marche?

Il existe deux méthodes de requête conjointe et de requête imbriquée. Une requête conjointe est une requête conjointe de plusieurs tables, qui peut être complétée en configurant le nœud d'association
dans resultMap pour configurer une classe un-à-un ; la requête imbriquée consiste à vérifier d'abord une table, puis à passer à une autre selon l'identifiant de clé étrangère du résultat dans cette table. Les données de requête dans la table sont également configurées via association, mais la requête d'une autre table est configurée via select.

De combien de façons Mybatis implémente-t-il le un-à-plusieurs ? Comment ça marche?

Il existe deux méthodes de requête conjointe et de requête imbriquée.
Une requête conjointe est une requête conjointe de plusieurs tables, et elle n'est interrogée qu'une seule fois. Elle peut être complétée en configurant une classe un-à-plusieurs dans le nœud de collection
dans resultMap ; une requête imbriquée consiste à vérifier d'abord une table, et selon l'identifiant de clé étrangère du résultat dans cette table, puis accédez à une autre table pour interroger les données, également via la collecte, mais la requête d'une autre table est configurée via select.

Que sont les caches de premier et deuxième niveaux de Mybatis ?

  • 1. Cache de niveau 1 : cache local HashMap basé sur PerpetualCache, sa portée de stockage est Session, lorsque la session est vidée ou fermée, tout le cache de la session sera effacé et le cache de niveau 1 est activé par défaut.
  • 2. Le cache de deuxième niveau est le même que le mécanisme de cache de premier niveau. La valeur par défaut est d'utiliser le stockage PerpetualCache et HashMap. La différence est que sa portée de stockage est Mapper (espace de noms) et la source de stockage peut être personnalisée, comme comme Ehcache. Le cache de deuxième niveau n'est pas activé par défaut.Pour activer le cache de deuxième niveau, l'utilisation de la classe d'attributs de cache de deuxième niveau doit implémenter l'interface de sérialisation sérialisable (qui peut être utilisée pour enregistrer l'état de l'objet), qui peut être configuré dans son fichier de mappage.

Pour le mécanisme de mise à jour des données du cache, lorsqu'une certaine étendue (session de cache de premier niveau/espace de noms de cache de deuxième niveau) est ajoutée/supprimée/modifiée, tous les caches sélectionnés sous cette étendue seront effacés par défaut.

Quelles sont les exigences lors de l’appel de l’interface Mapper de MyBatis ?

  • 1. Le nom de la méthode de l'interface Mapper est le même que l'identifiant de chaque SQL défini dans mapper.xml ;
  • 2. Le type de paramètre d'entrée de la méthode d'interface Mapper est le même que le type paramètreType de chaque SQL défini dans mapper.xml ;
  • 3. Le type de paramètre de sortie de la méthode d'interface Mapper est le même que le resultType de chaque SQL défini dans mapper.xml ;
  • 4. L'espace de noms dans le fichier Mapper.xml est le chemin de classe de l'interface du mappeur.

Je suppose que tu aimes

Origine blog.csdn.net/qq_44033208/article/details/132409109
conseillé
Classement