J'ai utilisé Mybatis récemment. J'ai déjà utilisé Ibatis. Dans l'ensemble, c'est similaire, mais j'ai encore rencontré de nombreux problèmes. Je vais l'enregistrer à nouveau.
Par exemple, la différence entre l'utilisation de la transmission des paramètres # {} et $ {},
Utilisez # pour passer le paramètre, et l'analyse de l'instruction SQL ajoutera "", par exemple, sélectionnez * dans la table où name = # {name}, le nom passé est xiao li, alors la dernière impression est
Sélectionnez * dans la table où name = 'xiao li', il sera analysé en tant que chaîne. C'est évidemment mieux que $. Le passage du paramètre # {} peut empêcher l'injection SQL. Si le paramètre que vous transmettez est des devis simples, alors si vous utilisez $ {}, cette méthode rapportera une erreur.
Un autre scénario est que si vous voulez faire un tri dynamique, comme l'ordre par colonne, assurez-vous d'utiliser $ {} pour le moment, car si vous utilisez # {}, alors celui imprimé sera
Sélectionnez * dans l'ordre de la table par «nom», c'est inutile,
À l'heure actuelle, si vous pouvez utiliser #, n'utilisez pas $.
Différence entre # et $ dans Mybatis
1. # Traitez toutes les données entrantes comme une chaîne et ajoutez des devis doubles aux données automatiquement entrantes. Par exemple: commande par # user_id #, si la valeur transmise est 111, alors la valeur lorsque l'analyse en SQL est de l'ordre par "111". Si la valeur transmise est id, l'analyse en SQL est l'ordre par "id".
2. $ Affiche directement les données transmises et les génère dans SQL. Par exemple: commande par $ user_id $, si la valeur transmise est 111, alors la valeur lors de l'analyse en SQL est de l'ordre par user_id. Si la valeur transmise est id, l'analyse en SQL est l'ordre par id.
3. La méthode # peut grandement empêcher l'injection de SQL.
4. La méthode $ ne peut pas empêcher l'injection SQL.
5. La méthode $ est généralement utilisée pour passer dans des objets de base de données, tels que le passage des noms de table.
6. Généralement, si vous pouvez utiliser #, n'utilisez pas $.
Lorsque vous utilisez l'ordre par des paramètres dynamiques lors du tri MyBatis, vous devez faire attention à l'utilisation de $ au lieu de #
Remplacement des cordes
Par défaut, l'utilisation de la syntaxe de format # {} fait que MyBatis crée une propriété d'instruction prétraitée et définit une valeur de sécurité avec l'arrière-plan (tel que?). C'est sûr et rapide, et parfois vous voulez simplement insérer une chaîne qui ne change pas directement en instruction SQL. Par exemple, comme Order By, vous pouvez l'utiliser comme ceci:
Commande par $ {Columnname}
Ici, Mybatis ne modifiera ni ne s'échappera pas des chaînes.
Important: il n'est pas sûr d'accepter la sortie de contenu de l'utilisateur et de le fournir à une chaîne inchangée dans l'instruction. Cela peut conduire à des attaques d'injection SQL potentielles, vous ne devez donc pas permettre aux utilisateurs d'entrer ces champs, ou généralement de les échapper et de les vérifier vous-même.
Un bref résumé de la différence entre $ et # dans mybatis
Il n'y a pas longtemps, quelqu'un est venu dans notre entreprise pour une interview. Notre manager a posé cette question. Je n'en avais qu'une petite compréhension, alors je suis allé à Baidu.
En fait, la différence est très simple. Vous le comprendrez avec un exemple. Écrivez une phrase SQL-FOR Exemple: Sélectionnez * dans user_role où user_code = "100";
Dans cette phrase, il doit être écrit comme sélectionné * à partir de $ {TableName} où user_code = # {usercod}
Par conséquent, le caractère $ est orthographié directement en SQL, tandis que le caractère # sera orthographié avec SQL sous la forme d'une chaîne.