Introduction: Qu'est-ce que Mybatis?
(Anciennement ibatis) Mybatis est un cadre de couche de persistance qui peut personnaliser SQL, des procédures stockées et des mappages avancés. MyBatis élimine le paramètre manuel de presque tous les code et paramètres JDBC et la récupération de l'ensemble de résultats. MyBatis peut utiliser du XML ou des annotations simples pour la configuration et la cartographie originale, les interfaces de cartographie et les Pojos de Java (Old Java objets) en enregistrements dans la base de données.
1. Le paramètre de la couche de mapper est la carte et la couche de service est responsable de la surcharge.
En raison de problèmes de mécanisme, la carte ne peut pas être surchargée. Les paramètres sont généralement définis sur la carte, mais cela rendra les paramètres floues. Si vous souhaitez clarifier le code, vous pouvez atteindre le but de la surcharge via la couche de service. La couche de service fournie à l'extérieur est surchargée, mais ces méthodes de service surchargées doivent en fait régler le même mappeur, mais les paramètres correspondants ne sont pas cohérents.
Peut-être que certaines personnes peuvent se demander, pourquoi ne pas la définir sur la couche de service? Personnellement, je ne recommande pas cela. Bien que j'aie adopté cette méthode dans mes projets précédents pour plus de commodité, cela causera évidemment des problèmes pour les travaux de maintenance futurs. Parce que cela fera que votre MVC s'appuie sur le modèle de carte. Ce modèle est en fait très bon et pratique pour construire un cadre, mais il y a un problème: juste en regardant la signature de la méthode, vous ne connaissez pas le nombre, le type et la signification de chaque paramètre représenté par la carte.
Imaginez, si vous ne changez que la couche de service ou la couche DAO, vous devez être clair sur les paramètres transmis par la carte dans tout le processus. À moins que vous commenciez ou que vous ayez une bonne documentation, vous devez comprendre clairement le code de chaque couche avant de savoir quels paramètres sont passés. Pour un MVC simple, c'est bien, mais si le niveau est complexe, le code deviendra extrêmement complexe, et si j'ajoute un paramètre, je dois ajouter les commentaires pour chaque couche. Par rapport aux commentaires, il est plus possible d'utiliser des signatures de méthode pour assurer cette contrôlabilité du code, car les commentaires peuvent être obsolètes, mais il est généralement peu probable que les signatures de la méthode soient périmées.
2. Essayez d'utiliser le choix et les autres déclarations que possible pour réduire la difficulté de maintenance.
Lors de la configuration de SQL dans MyBatis, essayez d'utiliser moins d'étiquettes comme si le choix. Si SQL peut être utilisé pour déterminer le jugement, essayez d'utiliser SQL (cas quand, Decode, etc.) pour une maintenance ultérieure. Sinon, une fois que SQL gonfle, il est super nauséeux. Si vous avez besoin de déboguer SQL dans MyBatis, vous devez supprimer un grand nombre de déclarations de jugement, ce qui est très gênant. D'un autre côté, un grand nombre de jugements IF feront contenir le SQL généré d'un grand nombre d'espaces, ce qui augmentera le temps de transmission du réseau, qui n'est pas non plus souhaitable.
De plus, un grand nombre de déclarations de Choisissez, inévitablement, le SQL généré sera incohérent à chaque fois, ce qui conduira à un grand nombre d'analyses dures d'Oracle, qui n'est pas non plus conseillé.
Jetons un coup d'œil à SQL comme ceci:
<Code Style = "Padding: 0.5em; marge: 0px; affichage: bloc; couleur: RGB (101,123,131); Overflow-X: Auto; Background: RGB (253,246,227)"> <span style = "Padding: 0px; margin: 0px"> <span style = "Padding: 0px; margin: 0px; 0px; Couleur: RGB (133,153,0) "> Sélectionner </ span> <span style =" Padding: 0px; Style = "Padding: 0px; marge: 0px; couleur: rgb (42,161,152)"> 1 </span> = <span style = "padding: 0px; marge: 0px; couleur: rgb (42,161,152)"> 1 </pan> <<span style = "padding: 0px; margin: 0px; Couleur: RGB (133,153,0) "> 1 </ span> <<span style =" Padding: 0px; Style = "Padding: 0px; marge: 0px; couleur: rgb (42,161,152)"> "startDate! = null et startDate! = '' et enddate! = null and endate! = ''" </span> <span style = "padding: 0px; margin: 0px; colore: rgb (133,153,0)" # {startDate} <span style = "padding: 0px; marge: 0px; Couleur: RGB (133,153,0) "> et </span> publishtime <= # {endDate} </ <span style =" padding: 0px; marge: 0px; Couleur: RGB (133,153,0) "> si </span> <in sinon> <span style =" padding: 0px; marge: 0px; Couleur: RGB (133,153,0) "> et </span> publishtime> = <span style =" padding: 0px; marge: 0px; Couleur: RVB (133,153,0) "> sysdate </span> - <span style =" padding: 0px; marge: 0px; Couleur: RVB (42,161,152) "> 7 </span> <span style =" padding: 0px; marge: 0px; Couleur: RGB (133,153,0) "> et </span> publishtime <= <span style =" padding: 0px; marge: 0px; Couleur: RGB (133,153,0) "> sysdate </span> </ sinon> </ <span style =" padding: 0px; marge: 0px; Couleur: RGB (133,153,0) "> sysdate </span> </ sinon> </ <span style =" padding: 0px; marge: 0px; Couleur: RVB (133,153,0) "> Choisissez </span>> </span>Tel que le jugement est en fait complètement inutile. Nous pouvons simplement utiliser Decode pour résoudre le problème de valeur par défaut:
<Code Style = "Padding: 0.5em; marge: 0px; affichage: bloc; couleur: RGB (101,123,131); Overflow-X: Auto; Background: RGB (253,246,227)"> <span style = "Padding: 0px; margin: 0px"> <span style = "Padding: 0px; margin: 0px; 0px; Couleur: RGB (133 ,153,0) "> Sélectionner </span> <Span Style =" Padding: 0px; <span style = "Padding: 0px; marge: 0px; couleur: RGB (133,153,0)"> Decode </span> (# {startDate}, <span style = "Padding: 0px; margin: 0px"> null </ span>, <span style = "padding: 0px; margin: 0px; Couleur: RGB (133,153,0) "> Sysdate </span> - <span style =" Padding: 0px; marge: 0px; Couleur: RGB (133 ,153,0) "> et </span> Publishtime <= <span style =" Padding: 0px; Margin: 0px; marge: 0px "> null </span>, <span style =" padding: 0px; marge: 0px; marge: 0px; Couleur: RGB (133,153,0) "> sysdate </span>, # {enddate}) </span> </code>Bien sûr, certaines personnes peuvent penser que l'introduction de cas quand et décoder nécessitera une analyse de fonction Oracle, ce qui ralentira le temps d'exécution SQL. Les étudiants intéressés peuvent revenir en arrière et faire un test pour voir s'il y aura un grand impact. En ce qui concerne l'expérience personnelle, je n'ai trouvé aucun ralentissement dans SQL en raison de l'analyse des fonctions. Généralement, des opérations telles que la jointure, l'ordre par, distinctes, la partitation par, etc., qui sont généralement étroitement liées à la conception de la structure de la table. Par rapport au degré d'impact d'efficacité de ceux-ci, l'impact de l'analyse de la fonction sur la vitesse d'exécution SQL devrait être négligeable.
Un autre point est que pour certaines affectations de valeur par défaut, comme le SQL ci-dessus, par défaut à la date actuelle, etc., vous pouvez en fait mentionner complètement la couche de service ou la couche de contrôleur pour le traitement. Ces jugements doivent être moins utilisés dans Mybatis. Parce que, dans ce cas, il est difficile de cacher le traitement. Si StartDate est vide et utilise Dynamic Sysdate sur SQL, il est impossible de déterminer la clé de la date de start-date du cache. Par conséquent, il est préférable de gérer les paramètres avant d'être transmis à MyBatis, afin que la couche MyBatis puisse également en réduire les instructions de choix, et il est également pratique pour le traitement du cache.
Bien sûr, il n'est pas absolu de ne pas utiliser si le choix. Parfois, afin d'optimiser SQL, si il faut résoudre, tels que des instructions. Bien sûr, comme n'est généralement pas recommandé. Cependant, s'il existe des scénarios à utiliser, supprimez comme chaque fois que vous n'avez pas besoin de l'utiliser, comme interroger le titre de l'article pour améliorer l'efficacité de la requête. La meilleure façon est d'utiliser des moteurs de recherche tels que Luccence pour résoudre ce problème de l'indexation du texte intégral.
En général, si et choisissez de juger, la branche est impossible à supprimer complètement, mais il est recommandé d'utiliser la méthode native SQL pour résoudre certains problèmes dynamiques, plutôt que de s'appuyer entièrement sur Mybatis pour compléter le jugement des branches dynamiques, car la branche du juge est trop complexe et difficile à entretenir.
3. Remplacez les commentaires SQL par des commentaires XML.
Essayez de ne pas conserver les commentaires de Mybatis Central SQL. Les commentaires causeront certains problèmes. Si vous avez besoin d'utiliser des commentaires, vous pouvez utiliser <! - - -> Dans XML pour annoter pour vous assurer qu'il n'y aura pas d'annotations SQL dans le SQL généré, réduisant ainsi la possibilité de problèmes. Un autre avantage de cela est qu'il peut clairement distinguer les annotations de SQL dans l'IDE.
Parlons maintenant des problèmes causés par les commentaires. Dans un projet sur lequel je travaille, le composant de pagination est basé sur MyBatis. Il mettra une autre couche de Select Count (*) Rownum_ de (......) en dehors du script SQL que vous avez écrit pour calculer le nombre total d'enregistrements. Dans le même temps, il y a un autre sélectionné imbriqué * à partir de (...) où Rownum> 10 et Ronnum <10 * 2 génèrent des informations de pagination. S'il y a un commentaire sur la dernière ligne de votre script, la partie ajoutée fera partie du commentaire et une erreur sera signalée. De plus, certaines conditions peuvent également provoquer l'ignorance de certaines conditions, comme les suivantes:
<Code Style = "Padding: 0.5EM; marge: 0px; Affichage: Block; Couleur: RGB (101,123,131); Overflow-X: Auto; Background: RGB (253,246 227)"> <span style = "Padding: 0px; marge: 0px; Color: RGB (133,153,0)" Style = "Padding: 0px; marge: 0px; couleur: rgb (133,153,0)"> de </span> test <span style = "padding: 0px; marge: 0px; couleur: rgb (133,153,0)"> où </span> col1> <span style = "padding: 0px; margin: 0px; Couleur: RGB (42,161,152) "> 1 </span> - voici le commentaire << Span Style =" Padding: 0px; A! = '' "</ span> <Span Style =" Padding: 0px; '' </ span >> <span style = "Padding: 0px; marge: 0px "> si </span>> </span> </code>
Même s'il y a des paramètres correspondants dans les paramètres passés, il n'y aura pas d'effet en fait, car le contenu suivant est en fait complètement commenté. Ce type d'erreur est difficile à détecter sans test rigoureux. De manière générale, les commentaires XML peuvent complètement remplacer les commentaires SQL, donc ce comportement doit être interdit.
4. Utilisez # {} chaque fois que possible, pas $ {}.
Essayez de ne pas utiliser $ {} dans mybatis. Il est très pratique de le faire. Cependant, il y a un problème qu'une grande utilisation entraînera l'analyse dure d'Oracle, ralentissant les performances de la base de données. Plus les performances de la base de données seront longues, plus les performances de la base de données seront pires. Pour le traitement général de plusieurs chaînes INS, vous pouvez vous référer à la solution suivante: http://www.myexception.cn/sql/849573.html, qui peut essentiellement résoudre la plupart des $ {}.
En ce qui concerne $ {}, une autre utilisation abusive est comme. J'ai un autre cas ici: par exemple, certains menus d'arbres, les nœuds seront conçus comme «01», «0101» et les nœuds à deux bits sont utilisés pour distinguer les hiérarchies. À l'heure actuelle, si vous devez interroger tous les nœuds sous Node 01, le SQL le plus simple est: Sélectionnez * FROM TREP WHERE ID Like '01% '. Ce type de SQL est réellement compréhensible, car il peut également utiliser des index, donc il ne nécessite pas de traitement spécial, utilise simplement directement. Mais si c'est le titre de l'article, vous devez prêter une attention supplémentaire: sélectionner * dans T_News_Text où le titre comme «% osc%», ce n'est pas une façon d'utiliser l'indexation. Comme mentionné ci-dessus, il est préférable d'utiliser la recherche de texte intégral. Mais si vous ne pouvez pas vous passer, vous devez faire attention à la méthode d'utilisation: id comme # {id} || '%' au lieu d'identifier comme '$ {id}%' pour réduire la possibilité d'analyse dure.
Certaines personnes pensent que l'utilisation || augmentera le temps pour le traitement d'Oracle. Je pense que je ne prends pas Oracle trop stupide. Bien que parfois c'est vraiment stupide, vous pouvez résumer les déchets stupides et non les ordures lorsque vous avez le temps, mais après un petit test, vous saurez que cette méthode de connexion devrait être très mince pour l'analyse et l'exécution de l'ensemble du SQL.
Bien sûr, il existe des cas particuliers qui ne peuvent pas être gérés, tels que l'injection dynamique de noms de colonnes, de noms de table, etc. Pour ces situations, il est difficile et aucun moyen plus pratique n'est trouvé. Étant donné que cette situation est moins susceptible de se produire, l'utilisation de $ {} n'aura aucun impact important. Bien sûr, si vous avez une morbidité de code, vous pouvez utiliser immédiatement le mécanisme d'exécution Dynamic SQL d'Oracle, afin d'éviter complètement la possibilité de $ {}. Cela introduira des modèles plus complexes, et pour le moment, vous devez faire des choix.
En réponse aux problèmes causés par le SQL dynamique ci-dessus, la manière la plus radicale est d'utiliser des procédures stockées et de les résoudre d'une manière native de la base de données pour faciliter le développement et le débogage. Bien sûr, cela apportera également des problèmes: il y aura des exigences plus élevées pour les développeurs, la gestion des procédures stockées, etc. Mon projet n'a pas adopté cette méthode, donc je ne développerai plus ici.
5. Utilisation simple de Mybatis.
La fonction de Mybatis est relativement faible, et il manque de nombreuses bibliothèques auxiliaires nécessaires, traitement des chaînes, etc., et il est également difficile de se développer, il est donc généralement possible de traiter certains rendements. Par conséquent, il est préférable de simplement l'utiliser comme un simple fichier de configuration SQL et un cadre ORM simple. N'essayez pas de faire trop de SQL dynamique dans Mybatis, sinon cela entraînera une maintenance ultérieure très dégoûtante.
Ce qui précède est le résumé d'apprentissage MyBatis que l'éditeur vous a présenté. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!