下面就是 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 型別。 |