Saya telah menggunakan mybatis baru -baru ini. Saya telah menggunakan iBatis sebelumnya. Secara keseluruhan, ini serupa, tetapi saya masih mengalami banyak masalah. Saya akan merekamnya lagi.
Misalnya, perbedaan antara menggunakan transmisi parameter #{} dan $ {{},
Gunakan # untuk lulus parameter, dan Parsing Pernyataan SQL akan menambahkan "", misalnya, pilih * dari tabel di mana nama = # {name}, nama yang disahkan adalah Xiao li, lalu cetakan terakhir adalah
Pilih * Dari tabel Where name = 'xiao li', itu akan diuraikan sebagai string. Ini jelas lebih baik dari $. Passing parameter #{} dapat mencegah injeksi SQL. Jika parameter yang Anda lewati adalah kutipan tunggal ', maka jika Anda menggunakan $ {}, metode ini akan melaporkan kesalahan.
Skenario lain adalah bahwa jika Anda ingin melakukan penyortiran dinamis, seperti pesanan demi kolom, pastikan untuk menggunakan $ {} saat ini, karena jika Anda menggunakan #{}, maka yang dicetak akan menjadi
SELECT * DARI PESANAN TABLE BY 'NAME', ini tidak berguna,
Saat ini, jika Anda dapat menggunakan #, jangan gunakan $.
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 $.
Saat menggunakan pesanan dengan parameter dinamis saat menyortir mybatis, Anda perlu memperhatikan penggunaan $ bukan #
Penggantian string
Secara default, menggunakan sintaks format #{} menyebabkan mybatis membuat properti pernyataan preproses dan menetapkan nilai yang aman dengannya sebagai latar belakang (seperti?). Ini aman dan cepat, dan kadang -kadang Anda hanya ingin memasukkan string yang tidak berubah langsung ke pernyataan SQL. Misalnya, seperti pesanan oleh, Anda dapat menggunakannya seperti ini:
Pesan dengan $ {ColumnName}
Di sini mybatis tidak akan memodifikasi atau melarikan diri dari string.
Penting: Tidak aman untuk menerima output konten dari pengguna dan memberikannya ke string yang tidak berubah dalam pernyataan tersebut. Ini dapat menyebabkan potensi serangan injeksi SQL, jadi Anda tidak boleh mengizinkan pengguna untuk memasuki bidang ini, atau biasanya melarikan diri dan memeriksanya sendiri.
Ringkasan singkat tentang perbedaan antara $ dan # di mybatis
Belum lama ini, seseorang datang ke perusahaan kami untuk wawancara. Manajer kami mengajukan pertanyaan ini. Saya hanya memiliki sedikit pemahaman tentang itu, jadi saya pergi ke Baidu.
Faktanya, perbedaannya sangat sederhana. Anda akan memahaminya dengan sebuah contoh. Tulis contoh SQL-For Kalimat: Pilih * dari user_role di mana user_code = "100";
Dalam kalimat ini, perlu ditulis sebagai pilih * dari $ {tableName} di mana user_code = #{usercode}
Oleh karena itu, karakter $ dieja menjadi SQL secara langsung, sedangkan karakter # akan dieja dengan SQL dalam bentuk string.