下面為一段代碼
SELECT TOP ${pageSize} * FROM ( SELECT o.* ,ROW_NUMBER() OVER(Order by o.id desc) AS RowNumber FROM ( select h.id, u.username, case h.sljg when 0 then '審核中' when 1 then '審核通過' when 2 then '審核失敗' end sljg,h.slyy,h.bz from admin a join JSBHB j on j.adminid=a.adminid left join hjxxb h on h.jsbh=j.jsbh left join users u on u.id=h.userid left join DMB d on d.DM=h.gxdm and d.DMLX=17 where a.adminid=#{adminid} and h.sljg =#{sljg} <if test="uname!=null and uname!=''"> and u.username=#{uname} </if> ) as o ) AS ur WHERE RowNumber <![CDATA[ > ]]> ${firstIndex}
進行分頁查詢數據:
在()中是我們查分頁查詢要查的表(子查詢),而()外是進行分頁,我們會發現
幾個注意事項
1 子查詢中不能有group by
2 在top 后面用到${}而不是#{}
否則會報
Cause: com.microsoft.sqlserver.jdbc.SQLServerException: '@P0' 附近有語法錯誤。
; uncategorized SQLException for SQL []; SQL state [S0001]; error code [102]; '@P0' 附近有語法錯誤。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: '@P0' 附近有語法錯誤。
${} 是字符串的拼接,一般在sql 語句形成時就會拼接上去變成sql 語句,不過一般可能會出現sql 注入
#{} 中的數據是解析成一個字符串后進行java類型和數據庫類型的轉換,生成sql 語句時會用?占位符占位
一般我們用#{},然而在特殊的情況下,我們因為一些語法規定必須用${},例如top 后面,有時可以用${},比如在后台定死的sql 語句
字段,不必擔心sql 注入
