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 $.
Empêcher l'injection SQL
Remarque: N'écrivez pas les instructions SQL comme sélectionnant * dans T_Stu où S_NAME Aime comme '% $ name $%', qui est extrêmement vulnérable aux attaques d'injection.
Les paramètres du format "$ {xxx}" participeront directement à la compilation SQL, empêchant ainsi les attaques d'injection. Cependant, en ce qui concerne les noms de table dynamiques et les noms de colonnes, vous ne pouvez utiliser que des formats de paramètres comme "$ {xxx}".
Lorsque vous écrivez des instructions de mappage MyBatis, essayez d'utiliser le format "# {xxx}". Si vous devez utiliser des paramètres comme "$ {xxx}", vous devez faire manuellement un bon travail de filtrage pour éviter les attaques d'injection SQL.
exemple
<sql id = "condition_where"> <isNotempty Property = "CompanyName" prend = "et"> t1.company_name comme # companyname # </ isNotempty> </ql>
Le code Java est similaire à votre original, mais il n'y a rien de mal à cela. Si vous pensez qu'il est difficile de résumer le jugement nul et «%» en une méthode.
if (! StringUtil.iSempty (this.companyName)) {table.setCompanyName ("%" + this.companyName + "%"); }Ce qui précède est la brève discussion sur la différence entre # et $ dans Mybatis et la méthode pour empêcher l'injection SQL. J'espère que tout le monde soutiendra Wulin.com plus ~