Day8

101 阅读1分钟

Day8

#{}和${}

#{}是对非字符串拼接参数的占位符,如果入参是简单数据类型,#里可以任意写,但如果入参是对象类型,则#{}里必须是对象的成员变量名称,#{}可以有效防止sql注入

#{}占位符#{}里如何看,看parameterType参数的类型

  1. 如果parameterType的类型是简单类型(8种基本(封装)+String)则#里随便写
  2. parameterType的类型是实体类型,则#{}只能是类中的成员变量的名称,而且区分大小写

主要是针对字符串拼接替换,如果入参是基本数据类型,{}主要是针对字符串拼接替换,如果入参是基本数据类型,{}里必须是value,但如果入参是对象类型,则里必须是对象的成员变量名称。{}里必须是对象的成员变量名称。{}可以替换列名和表名,存在sql注入风险,尽量少用。

${}字符串拼接或者字符串替换。

  1. 字符串拼接,一般用于模糊查询,建议少用,因为有sql注入的风险。

    分两种情况,同样看parameterType的类型

    • 如果parameterType的类型是简单类型,${}里随便写。
    • 如果parameterType的类型是实体类的类型,则${}只能是类中成员变量的名称(现在很少用了)

什么是动态sql

可以定义代码片段,可以进行逻辑判断,可以进行循环处理(批量处理),是条件判断更为简单。

  1. :用来定义代码片段,可以将所有的列名,或者负责的条件定义为代码片段,供使用时调用。

  2. :用来引用定义的代码片段。

    <!--定义代码片段-->
        <sql id="allColumns">
            id,username,birthday,sex,address
        </sql>
        <!--引用定义好的代码片段-->
        <select id="getAll" resultType="users">
            select <include refid="allColumns"></include>
            from users
        </select>
    
  3. :进行条件判断

  4. :进行多条件拼接,在查询,删除,更新中使用。

  5. :有选择地更新处理,至少更新一列。

  6. :用来循环遍历,完成循环条件查询,批量删除,批量增加,批量更新

    参数详解:

    connection:用来指定入参类型,如果是List集合,则为list,如果是Map集合则为map,如果是数组,则为array。

    item:每次循环遍历出来的值或对象

    separator:多个值或对象或语句之间的分隔符

    open:整个循环外边的后括号

    close:真个循环外边的后括号