首先我們要知道where是什麼:一個判斷符。在SQL操作中,控制只選擇指定的行。
in的其實歸類於特殊的比較運算子
expr1 between expr2 and expr3:表示expr1的值在expr2和expr3之間
expr in(expr2,expr3,expr4,…)表示expr1等於後面括號裡面的任意一個表示式的值
like:字串匹配,like後的字元創支援萬用字元

is null:要求指定值等於null

=======================================================

mybatis執行查詢語句,可以在plsql中查詢資料,但是在程式中查詢不到

  今天用mybatis查詢語句的時候,控制檯輸出的sql語句可以在plsql裡面可以正確執行,但是查詢出來就是沒有資料。
  原查詢語句如下:(為了保密性,將敏感的包名給馬賽克了。)

 

此sql可以在plsql中正確執行,但是查詢不到資料。

解決辦法是:將查詢條件中的“#”替換成“$”.

原因如下:MyBatis看到 #{}會認為你在給sql中的變數賦值,就像JDBC程式設計中給問號賦值一樣(自動在前後加單引號)也就是說,他把你傳入的字串並沒有當做多個值,而是當做一個大的字串,所以查詢不到值)

            而MyBatis看到${}的時候會直接將之替換成變數的值而不做任何處理。

2015-09-09補充遇到類似問題的情況:

  今天在專案中由於jsp中傳遞後臺的引數多了一個空格,導致查詢一直查詢不到資料,將引數和sql複製到plsql能正常執行,但是放在程式中一直返回null,百思不得其解。然後看看日誌發現可能是空格影響的。最後將空格去掉,問題正常。下圖分別是產生問題的後臺程式碼和日誌和jsp頁面程式碼截圖:

  重點是jsp中的引數截圖,都快被自己蠢哭了,截圖很小,因為就是這一行影響的。

用了where in賦值要全部替換不能用#