下面是 insert,update 和 delete 语句的示例:

    1. <insert id="insertAuthor">
    2. insert into Author (id,username,password,email,bio)
    3. values (#{id},#{username},#{password},#{email},#{bio})
    4. </insert>
    5. <update id="updateAuthor">
    6. update Author set
    7. username = #{username},
    8. bio = #{bio}
    9. where id = #{id}
    10. </update>
    11. <delete id="deleteAuthor">
    12. delete from Author where id = #{id}
    13. </delete>

    如前所述,插入语句的配置规则更加丰富,在插入语句里面有一些额外的属性和子元素用来处理主键的生成,并且提供了多种生成方式。

    如果你的数据库还支持多行插入, 你也可以传入一个 Author 数组或集合,并返回自动生成的主键。

    1. <insert id="insertAuthor" useGeneratedKeys="true"
    2. keyProperty="id">
    3. <foreach item="item" collection="list" separator=",">
    4. (#{item.username}, #{item.password}, #{item.email}, #{item.bio})
    5. </foreach>
    6. </insert>

    对于不支持自动生成主键列的数据库和可能不支持自动生成主键的 JDBC 驱动,MyBatis 有另外一种方法来生成主键。

    在上面的示例中,首先会运行 selectKey 元素中的语句,并设置 Author 的 id,然后才会调用插入语句。这样就实现了数据库自动生成主键类似的行为,同时保持了 Java 代码的简洁。

    selectKey 元素描述如下:

    1. <selectKey
    2. keyProperty="id"
    3. order="BEFORE"
    4. statementType="PREPARED">
    selectKey 元素的属性
    属性描述
    keyPropertyselectKey 语句结果应该被设置到的目标属性。如果生成列不止一个,可以用逗号分隔多个属性名称。
    keyColumn返回结果集中生成列属性的列名。如果生成列不止一个,可以用逗号分隔多个属性名称。
    resultType结果的类型。通常 MyBatis 可以推断出来,但是为了更加准确,写上也不会有什么问题。MyBatis 允许将任何简单类型用作主键的类型,包括字符串。如果生成列不止一个,则可以使用包含期望属性的 Object 或 Map。
    order可以设置为 BEFOREAFTER。如果设置为 BEFORE,那么它首先会生成主键,设置 keyProperty 再执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 中的语句 - 这和 Oracle 数据库的行为相似,在插入语句内部可能有嵌入索引调用。
    statementType和前面一样,MyBatis 支持 STATEMENTPREPAREDCALLABLE 类型的映射语句,分别代表 Statement, 和 CallableStatement 类型。