下面就是 insert,update 和 delete 語句的示例:
<insert id="insertAuthor" parameterType="domain.blog.Author"> insert into Author (id,username,password,email,bio) values (#{id},#{username},#{password},#{email},#{bio}) </insert>
如前所述,插入語句有一點多,它有一些屬性和子元素用來處理主鍵的生成。
首先,如果你的數據庫支持自動生成主鍵的字段(比如 MySQL 和 SQL Server) ,那么 你可以設置 useGeneratedKeys=”true”,而且設置 keyProperty 到你已經做好的目標屬性上。 例如,如果上面的 Author 表已經對 id 使用了自動生成的列類型,那么語句可以修改為:
<insert id="insertAuthor" parameterType="domain.blog.Author" useGeneratedKeys="true" keyProperty="id"> insert into Author (username,password,email,bio) values (#{username},#{password},#{email},#{bio}) </insert>
MyBatis 有另外一種方法來處理數據庫不支持自動生成類型,或者可能 JDBC 驅動不支 持自動生成主鍵時的主鍵生成問題。
這里有一個簡單(甚至很傻)的示例,它可以生成一個隨機 ID(可能你不會這么做, 但是這展示了 MyBatis 處理問題的靈活性,因為它並不真的關心 ID 的生成):
<insert id="insertAuthor" parameterType="domain.blog.Author"> <selectKey keyProperty="id" resultType="int" order="BEFORE"> select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1 </selectKey> insert into Author (id, username, password, email,bio, favourite_section) values (#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR}) </insert>
PS:以上selectKey里你可以修改為其它的主鍵生成方式如
SELECT user_info$seq.NEXTVAL FROM DUAL
在上面的示例中,selectKey 元素將會首先運行,Author 的 id 會被設置,然后插入語句 會被調用。 這給你了一個簡單的行為在你的數據庫中來處理自動生成的主鍵, 而不需要使你 的 Java 代碼變得復雜。
selectKey 元素描述如下:
<selectKey keyProperty="id" resultType="int" order="BEFORE" statementType="PREPARED">
屬性 | 描述 |
---|---|
keyProperty | selectKey 語句結果應該被設置的目標屬性。 |
resultType | 結果的類型。MyBatis 通常可以算出來,但是寫上也沒有問題。 MyBatis 允許任何簡單類型用作主鍵的類型,包括字符串。 |
order | 這可以被設置為 BEFORE 或 AFTER。如果設置為 BEFORE,那 么它會首先選擇主鍵, 設置 keyProperty 然后執行插入語句。 如果 設置為 AFTER,那么先執行插入語句,然后是 selectKey 元素- 這和如 Oracle 數據庫相似,可以在插入語句中嵌入序列調用。 |
statementType | 和前面的相 同,MyBatis 支持 STA TEMENT ,PREPARED 和 CALLABLE 語句的映射類型,分別代表 PreparedStatement 和 CallableStatement 類型。 |