在專案中使用了ibatis,使用xml方便的維護sql,清晰明了,偶然發現動態拼接的sql語句在資料中執行很好的返回結果,而到了程式中總是有欄位返回null值,跟在資料庫中執行的結果不一致
id="getuser"
parameterclass="searchmodel"
resultclass="userto">
select id,name
property="birthday"
prepend=",">
time as birthday
isnotnull>
dynamic>
from user
select>
這個簡單查詢中,「birthday」這個欄位是在傳入引數birthday不為null的情況才會返回,有時候即使資料庫中time欄位有值也會返回null,這個是因為ibatis機制的問題,這是因為只定義了birthday欄位不為null時返回的別名(值),而另外的情況未為ibatis設定返回規則,預設的ibatis就會都返回null
ibatis中
這種動態判斷關鍵字最好是成對出現,將所有情況規則都寫出來,避免ibatis使用預設規則導致的動態sql別名字段返回為null問題
id="getuser"
parameterclass="searchmodel"
resultclass="userto">
select id,name
property="birthday"
prepend=",">
time as birthday
isnotnull>
property="birthday"
prepend=",">
null as birthday
isnull>
dynamic>
from user
select>
注意: ibatis中的動態拼接select 後面列時,會出現 「索引超出了陣列界限」的錯誤,需要將動態拼接的情況寫完整,類似上述情況 ibatis 動態查詢
最近專案需要,做了乙個動態查詢。把查詢結果返回到頁面上顯示。要查詢的字段和表名都是動態的,是在後台拼出來的。可是在ibatis中執行的時候總報 列名無效 在sql plus中執行則正常。百思不得其解。後來通過查資料,解決如下 select t.creator,t.create dt,decode o...
ibatis 動態查詢
在複雜查詢過程中,我們常常需要根據使用者的選擇決定查詢條件,這裡發生變化的 並不只是sql 中的引數,包括select 語句中所包括的字段和限定條件,都可能發生變 化。典型情況,如在乙個複雜的組合查詢頁面,我們必須根據使用者的選擇和輸入決定查 詢的條件組合。乙個典型的頁面如下 對於這個組合查詢頁面,...
動態sql語句 動態別名
動態sql語句我們經常會用的到,下面為您介紹的是使用動態sql語句自定義列名的實現方法,如果您之前遇到過類似的問題,不妨一看。create procedure poquery1 supplyid varchar 30 引數 as declare no nvarchar 100 declare seq...