MyBatis快速入門(12)XML映射文件-增刪改

數據庫修改語句包括 insert,update 和 delete三種,它們的實現非常接近,看一下insert標簽有哪些屬性:

delete標簽的屬性:

update標簽的屬性:

可以看到,三種標簽的屬性非常接近,delete和update基本一樣,insert相比其它兩種多了幾個標簽,下面會詳細介紹。





增刪改標簽屬性

增刪改語句的標簽的屬性中:

id和parameterType的意思不用說,作用于前面的select的id和parameterType屬性一樣。

flushCache后面介紹緩存會細說。

timeout與statementType和前面select中的作用也一樣。

useGeneratedKeys用來獲取主鍵,有時候主鍵是數據庫自增生成的,并不是新增時作為參數傳入的,這種情況如果想獲取需要使用這個屬性。keyProperty,唯一標記一個屬性,MyBatis 會通過 getGeneratedKeys 的返回值或者通過 insert 語句的 selectKey 子元素設置它的鍵值。如果希望得到多個生成的列,也可以是逗號分隔的屬性名稱列表。

keyColumn,通過生成的鍵值設置表中的列名,這個設置僅在某些數據庫(像 PostgreSQL)是必須的,當主鍵列不是表中的第一列的時候需要設置。如果希望使用多個生成的列,也可以設置為逗號分隔的屬性名稱列表。

上面基本介紹了增刪改所有的屬性,下面是詳細信息:

注意增刪改默認返回的都是影響的行數,因此回參類型默認都是int,通過上面的介紹可以大致了解,下面通過幾個例子來看如何使用。





示例1:簡單新增

先來看一個簡單的新增功能:

傳過來的是一個user對象,里面包含了id和name兩個屬性,分別插入到數據庫的id和name兩個字段中。上面的例子很簡單,來看一下接口:

入參類型是User,回參是新增的行數,因此是Integer。SQL語句的寫法基本上和數據庫中的寫法沒什么區別,因此只要把值替換為mybatis的參數即可。







示例2:新增獲取自增id

如前所述,插入語句的配置規則更加豐富,在插入語句里面有一些額外的屬性和子元素用來處理主鍵的生成,而且有多種生成方式。如果你的數據庫支持自動生成主鍵的字段(比如 MySQL 和 SQL Server設置id為自增長主鍵),那么你可以設置 useGeneratedKeys=”true”,然后再把 keyProperty 設置到目標屬性id上就 OK 了。例如:

id改為自增以后,新增語句就不用傳入id了。其它的地方不變,只需要在標簽里加上兩個屬性,就可以在新增完后,獲取id的值。接口的寫法也是一樣的:

在調用接口的時候可以這樣獲取id:

可以看到我們新建的user對象并沒有設置id的值,但是傳入并執行mybatis的insert方法后,user對象里面的id就被賦值了。調用方法:

執行結果:

通過這種方式就可以獲取數據庫自動生成的主鍵值。對于不支持自動生成類型的數據庫或可能不支持自動生成主鍵的 JDBC 驅動,MyBatis 有另外一種方法來生成主鍵。這里有一個簡單的示例,它可以生成一個隨機 ID(你最好不要這么做,但這里展示了 MyBatis 處理問題的靈活性及其所關心的廣度):

上面的新增語句中,insert標簽和下面的insert into語句并沒有什么不同,只不過標簽內部開始的位置加了一個selectKey標簽,這個標簽內有一個select語句,這個語句的執行順序為 order="BEFORE",就是在下面的insert之前執行。keyProperty="id"表示查詢的結果會賦值到id上面,結果類型為int。這一種簡單的通過mybatis生成id的方法,當然現實中我們完全可以利用uuid或者雪花算法等等先生成,再傳入進來。所以最好不要使用這種方式。下面是selectKey標簽屬性的介紹:






示例3:update

來看一個更新語句的簡單例子:

接口定義:

簡單的根據主鍵更新字段就像上面這樣。還有一種情況就是根據舊主鍵修改為新主鍵,這時候就要用專門的字段區分舊主鍵和新主鍵了。







示例4:delete

看一個刪除的例子:

接口定義:

無論刪除和更新一條還是多條,比較insert都要簡單一些。



代碼地址:https://gitee.com/blueses/mybatis-demo? 04

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容