zoukankan      html  css  js  c++  java
  • 从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 注入

  • 相关阅读:
    2.搭建第一个http服务:三层架构
    1.基础入门
    MyISAM和InnoDB索引区别
    分区
    事务的四大特性
    事务
    String
    自己写native方法
    序列化和反序列化
    反射
  • 原文地址:https://www.cnblogs.com/jsbk/p/9817226.html
Copyright © 2011-2022 走看看