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

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

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

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

  1. <insert id="insertAuthor" useGeneratedKeys="true"
  2. insert into Author (username, password, email, bio) values
  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. resultType="int"
  4. statementType="PREPARED">
属性 描述
keyProperty selectKey 语句结果应该被设置的目标属性。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
keyColumn 匹配属性的返回结果集中的列名称。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
resultType 结果的类型。MyBatis 通常可以推算出来,但是为了更加确定写上也不会有什么问题。MyBatis 允许任何简单类型用作主键的类型,包括字符串。如果希望作用于多个生成的列,则可以使用一个包含期望属性的 Object 或一个 Map。
order 这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素 - 这和像 Oracle 的数据库相似,在插入语句内部可能有嵌入索引调用。
statementType 与前面相同,MyBatis 支持 STATEMENT,PREPARED 和 CALLABLE 语句的映射类型,分别代表 PreparedStatement 和 CallableStatement 类型。