下面为一段代码
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 注入