Maison > Java > javaDidacticiel > La différence entre ${ } et #{ } en Java Mybatis

La différence entre ${ } et #{ } en Java Mybatis

Guanhui
Libérer: 2020-07-21 13:00:45
avant
3657 Les gens l'ont consulté

La différence entre ${ } et #{ } en Java Mybatis

D'accord, cela fait presque un an que j'ai commencé à développer. J'ai toujours lu les blogs des autres, mais je suis trop paresseux pour écrire et je ne sais pas comment bloguer. Commençons lentement à pratiquer le blogging aujourd'hui. Je viens de rencontrer ce problème dans mon entreprise il y a quelque temps.

1. Exemples

select * from user where name = "dato"; 
select * from user where name = #{name}; 
select * from user where name = '${name}';
Copier après la connexion

Dans des circonstances normales, nous ne remarquerons rien de différent ici. Parce que ces SQL peuvent atteindre notre objectif, interroger l'utilisateur nommé dato.

2. Différences

Dynamic SQL est l'une des fonctionnalités puissantes de mybatis et une raison importante pour laquelle il est supérieur aux autres frameworks ORM. Avant que mybatis ne précompile l'instruction SQL, il analysera dynamiquement le SQL et l'analysera dans un objet BoundSql, où le SQL dynamique est également traité. Dans l'étape d'analyse SQL dynamique, #{ } et ${ } auront des performances différentes

select * from user where name = #{name};
Copier après la connexion

#{} seront analysés dans un marqueur de paramètre lors de l'analyse dynamique. Autrement dit, l'instruction après l'analyse est :

select * from user where name = ?;
Copier après la connexion

Ensuite, lorsque nous utilisons ${},

select * from user where name = '${name}';
Copier après la connexion

${} remplira les paramètres que nous avons transmis sous forme de chaînes de caractères lors de l'analyse dynamique In. notre instruction, elle deviendra l'instruction suivante

select * from user where name = "dato";
Copier après la connexion

L'instruction SQL avant précompilation ne contient plus de variables et est une donnée complètement constante. C'est l'équivalent de notre SQL ordinaire sans variables.

Pour résumer, la phase de remplacement des variables ${ } se fait dans la phase d'analyse SQL dynamique, tandis que le remplacement de #{ } variables se fait dans le SGBD.

C'est la principale différence que l'on peut voir entre #{} et ${}. De plus, il y a les différences suivantes :

  • Le chemin peut être très grand. Empêchez l'injection SQL dans une certaine mesure. La méthode

  • $ ne peut pas empêcher l'injection SQL. La méthode

  • $ est généralement utilisée pour transmettre des objets de base de données, tels que les noms de tables.

  • Généralement, n'utilisez pas $ si vous le pouvez. utilisez #.

Donc, lorsque nous utilisons mybatis, nous essayons d'utiliser la méthode # ! ! ! C'est ce à quoi tout le monde devrait prêter attention

Tutoriel recommandé : "Tutoriel Java"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal