從sqlServer 分頁查詢談${}和#{}


下面為一段代碼

 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 注入

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM