Perbedaan antara # dan $ di mybatis
1. # Perlakukan semua data yang masuk sebagai string, dan tambahkan kutipan ganda ke data yang masuk secara otomatis. Misalnya: Pesan dengan #user_id #, jika nilai yang dilewati adalah 111, maka nilai saat mem -parsing ke SQL dipesan oleh "111". Jika nilai yang dilewati adalah ID, parsed ke SQL adalah pesanan dengan "ID".
2. $ Menampilkan data yang diteruskan secara langsung dan menghasilkannya di SQL. Misalnya: Pesan dengan $ user_id $, jika nilai yang dilewati adalah 111, maka nilai saat diuraikan ke SQL adalah pesanan oleh user_id. Jika nilai yang dilewati adalah ID, parsed ke SQL adalah pesanan oleh ID.
3. Metode # dapat sangat mencegah injeksi SQL.
4. Metode $ tidak dapat mencegah injeksi SQL.
5. Metode $ umumnya digunakan untuk lulus dalam objek database, seperti meneruskan nama tabel.
6. Umumnya, jika Anda dapat menggunakan #, jangan gunakan $.
Cegah injeksi SQL
Catatan: Jangan tulis pernyataan SQL sebagai pilih * dari t_stu di mana s_name seperti '%$ name $%', yang sangat rentan terhadap serangan injeksi.
Parameter dalam format "$ {xxx}" akan langsung berpartisipasi dalam kompilasi SQL, sehingga mencegah serangan injeksi. Namun, ketika datang ke nama tabel dinamis dan nama kolom, Anda hanya dapat menggunakan format parameter seperti "$ {xxx}".
Saat menulis pernyataan pemetaan mybatis, coba gunakan format "#{xxx}". Jika Anda harus menggunakan parameter seperti "$ {xxx}", Anda harus secara manual melakukan pekerjaan penyaringan yang baik untuk mencegah serangan injeksi SQL.
contoh
<sql id = "condition_where"> <isnotempty properti = "companyName" prepend = "dan"> t1.company_name seperti # companyName # </ShoTEempty> </sql>
Kode Java mirip dengan yang asli Anda, tetapi tidak ada yang salah dengannya. Jika Anda berpikir itu merepotkan untuk merangkum penilaian nol dan '%' menjadi satu metode.
if (! stringutil.isempty (ini. }
Di atas adalah diskusi singkat tentang perbedaan antara # dan $ di mybatis dan metode untuk mencegah injeksi SQL. Saya harap semua orang akan mendukung wulin.com lebih banyak ~