1. # تعامل مع جميع البيانات الواردة كسلسلة ، وأضف عروض أسعار مزدوجة إلى البيانات الواردة تلقائيًا. على سبيل المثال: اطلب بواسطة #user_id #، إذا كانت القيمة التي تم تمريرها هي 111 ، فإن القيمة عند التحليل في SQL هي أمر "111". إذا كانت القيمة التي تم تمريرها هي معرف ، فإن التحليل في SQL هو أمر من خلال "ID".
2. $ يعرض البيانات التي تم تمريرها مباشرة وإنشاءها في SQL. على سبيل المثال: اطلب بواسطة $ user_id $ ، إذا كانت القيمة التي تم تمريرها هي 111 ، فإن القيمة عند تحليلها في SQL يتم طلبها بواسطة user_id. إذا كانت القيمة التي تم تمريرها هي معرف ، فإن التحليل في SQL هو أمر حسب المعرف.
3. يمكن أن تمنع طريقة # بشكل كبير حقن SQL.
4. طريقة $ لا يمكن أن تمنع حقن SQL.
5. يتم استخدام طريقة $ بشكل عام لتمرير كائنات قاعدة البيانات ، مثل تمرير أسماء الجدول.
6. عمومًا ، إذا كنت تستطيع استخدام #، فلا تستخدم $.
عند استخدام الطلب حسب المعلمات الديناميكية عند فرز MyBatis ، تحتاج إلى الانتباه إلى استخدام $ بدلاً من #
استبدال السلسلة
بشكل افتراضي ، يؤدي استخدام بناء جملة Format #{} إلى إنشاء خاصية بيان معالجة مسبقًا وتعيين قيمة آمنة معها كخلفية (مثل؟). هذا آمن وسريع ، وأحيانًا تريد فقط إدخال سلسلة لا تتغير مباشرة إلى عبارة SQL. على سبيل المثال ، مثل الطلب ، يمكنك استخدامه مثل هذا: اطلب بواسطة $ {columnName}
هنا لن يقوم MyBatis بتعديل أو سلاسل الهروب.
هام: ليس من الآمن قبول إخراج المحتوى من المستخدم وتوفيره لسلسلة غير متغيرة في البيان. يمكن أن يؤدي ذلك إلى هجمات حقن SQL المحتملة ، لذلك يجب ألا تسمح للمستخدمين بدخول هذه الحقول ، أو عادةً ما يهربون ويفحصونها بنفسك.
ما سبق هو مناقشة موجزة حول الفرق بين # و $ في MyBatis. آمل أن يتمكن الجميع من دعم wulin.com ~