• Mybatis之占位符与拼接符


    1.占位符

        1.1  含义:

            在持久化框架中,为了将约束条件中的可变参数从sql中分离出来,在原有的参数位置使用特殊的标记来标记该位置,后期通过代码给sql传递参数(即实现sql与代码分离开)。这个特殊的标记被称为占位符。

        1.2 优点:

            1.2.1 防止sql注入,提高了安全性

            1.2.2 对于只有参数不同的sql语句,只需要编译一次{以后会从缓存中获取}

        1.3 形式:

             占位符在持久化框架中的一般形式为:?。Mybatis为了更加方便的与参数列表进行映射,采用的形式为:#{参数名}

        1.4 示例:

    SELECT * FROM t_address t where t.id = #{id}
    --等价于
    SELECT * FROM t_address t where t.id =

        1.5 注意:

            占位符只能在约束条件中使用

    --持久化框架中,不允许以下形式:
    SELECT * FROM ?  
    SELECT * FROM t_address order by ?  
    
    --mybatis中,不允许以下形式                             
    SELECT * FROM #{tableName}
    SELECT * FROM t_address order by  #{orderBy}

    2. 拼接符

        2.1 背景:

            由于占位符只能在sql语句的约束条件中使用,有时候sql语句需要其它的一些变量参数(非约束条件中)来控制,如:表名、排列顺序等。所以Mybatis使用了拼接符的概念

        2.2 形式:${参数名}

        2.3 示例:

    SELECT * FROM ${tableName}

        2.4 注意:

            如果参数通过用户获取,则不能使用拼接符的形式【会发生sql注入,不安全】

    3. 补充:

        在进行预编译的时候,会用参数值直接替换${参数名},用?替换#{参数名}

    4. sql注入

        4.1 概念:

            将sql语法里的一些组合,通过表单提交或页面请求注入到sql语句中,欺骗服务器执行恶意sql语句

        4.2 示例:

    String id =1 or 1 = 1”;
    String sql =select * from t_address where id =+id;

        4.2 防止sql注入的方法:

            对于表单提交的数据,使用占位符的形式构建sql语句(占位符不识别参数的sql语法【作为普通字符串】)

    String id = “1 or 1 = 1”
    String sql = “select * from t_address where id = ?”
    
    //解析后:
    
    select * from t_address where id = ‘1 or 1 = 1’;
  • 相关阅读:
    zstu.4189: 逻辑运算(构建 && 前缀表达式入门)
    Oulipo (kmp)
    zstu.4194: 字符串匹配(kmp入门题&& 心得)
    杭赛.Triangle(数学推导)
    cf.VK CUP 2015.C.Name Quest(贪心)
    微服务技术栈
    luogu3320 寻宝游戏 (dfs序+倍增lca+set)
    cf757F Team Rocket Rises Again (dijkstra+支配树)
    cf983E NN Country (倍增+dfs序+树状数组)
    cf860E Arkady and A Nobody-men (树剖)
  • 原文地址:https://www.cnblogs.com/BlueStarWei/p/9385320.html
Copyright © 2020-2023  润新知