概念
OGNL是Object-Graph Navigation Language的縮寫,它是一種功能強大的表達式語言,通過它簡單一致的表達式語法,可以存取對象的任意屬性,調用對象的方法,遍歷整個對象的結構圖,實現字段類型轉化等功能。它使用相同的表達式去存取對象的屬性。這樣可以更好的取得數據。
用法
Ognl表達式的用法與EL表達式的用法類似,作者這里就以它們作為對比進行簡述:
EL表達式:
是JSP中所使用的表達式;寫法:${屬性名};
對變量的處理,采用的是字符串拼接的方式;
如:select * from author where id=${value}
讀取基本數據類型的值時,{}中只能寫 value,不能填寫其他值;
Ognl表達式:
是一種功能功能強大的表達式,可以存取對象的任意屬性;寫法:#{屬性名};
對變量的處理,采用的是預編譯的方式;
如:select * from author where id=#{id}
讀取基本數據類型的值時,{}中可以使任意變量名;
作者這里將它們的區別簡要做了一張表格,如下:
|
EL表達式 |
Ognl表達式 |
變量的處理 |
字符串拼接 |
預編譯 |
基本數據類型 |
${value} |
#{任意變量名} |
對象類型(pojo類型) |
${屬性名} |
#{屬性名} |
|
${對象屬性.屬性} |
#{對象屬性.屬性} |
這里再通過一個案例來看看他們的區別:
需要注意的是:
EL表達式:字符串拼接,接收到的內容不加任何修飾直接拼接在SQL中,可能引起SQL注入;
Ognl表達式:預編譯,讀取表達式的值,通過preparedStatement的方式進行SQL語句的執行;
PS:因作者能力有限,如有誤還請諒解