1. sql
    1. 概念
      1. 这个元素可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中。它可以被静态地(在加载参数) 参数化. 不同的属性值通过包含的实例变化.
      2. 属性值可以用于包含的refid属性或者包含的字句里面的属性值
    2. 例子
      1. <sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>
  2. 参数(Parameters)
    1. 例子
      1. <insert id="insertUser" parameterType="User"> insert into users (id, username, password) values (#{id}, #{username}, #{password}) </insert>
      2. 如果 User 类型的参数对象传递到了语句中,id、username 和 password 属性将会被查找,然后将它们的值传入预处理语句的参数中
    2. 参数也可以指定一个特殊的数据类型
      1. #{property,javaType=int,jdbcType=NUMERIC}
      2. javaType 通常可以从参数对象中来去确定,前提是只要对象不是一个 HashMap。 那么 javaType 应该被确定来保证使用正确类型处理器
  3. 字符串替换
    1. 概念
      1. 使用$符号代替#设置值
      2. 默认情况下,使用#{}格式的语法会导致 MyBatis 创建预处理语句属性并安全地设置值(比如?)
      3. 这样做更安全,更迅速,通常也是首选做法,不过有时你只是想直接在 SQL 语句中插入一个不改变的字符串
    2. 例子
      1. ORDER BY ${columnName}
    3. 注意
      1. 以这种方式接受从用户输出的内容并提供给语句中不变的字符串是不安全的,会导致潜在的 SQL 注入攻击,因此要么不允许用户输入这些字段,要么自行转义并检验。