回覆列表
  • 1 # 使用者7223182162706

    在專案中的表格主鍵我們大多使用自增的欄位id來表示,但是不同的資料庫對自增這個問題的解決方式是不同的,如MySql本身是支援自增的,對欄位新增auto_increment配置即可,但是Oracle並不支援自增,必須藉助序列來解決,而selectKey就是幫助MyBatis來解決這個問題的。那我們來看下MyBatis在插入資料的時候是如何解決主鍵自增問題的。

    看下Mybatis中insert語句與主鍵有關的兩個屬性配置:

    如果你的資料庫支援自動生成主鍵的欄位(比如 MySQL 和 SQL Server 資料庫),那麼你可以設定 useGeneratedKeys=”true”,而且設定 keyProperty 到你已經做好的目標屬性上。例如在MySql中建立表格User,設定id欄位為自增:

    那麼插入資料的配置語句可以修改為:

    MyBatis 有另外一種方法來處理資料庫不支援自動生成型別,或者可能 JDBC 驅動不支援自動生成主鍵時的主鍵生成問題。 如Oracle中不支援關鍵字auto_increment,所以不能設定欄位為自增,那麼在插入資料的時候不能自動生成主鍵值,就需要使用selectKey,語句如下:

    在上面的示例中, selectKey 元素將會首先執行, User的 id 會被設定,然後插入語句會被呼叫。這給你了一個簡單的行為在你的資料庫中來處理自動生成的主鍵,而不需要使你的 Java 程式碼變得複雜。 selectKey 元素描述如下:

    來個實際的例子驗證下:

    Oralce資料庫中有表格t_user和序列idseq,表格的資料如下:

    idseq的當前值是4,狀態如下:

    user的對映檔案中有如下配置:

    當我們執行如下程式碼後,看下資料的變化:

    程式碼中在執行addUser之前沒有設定user物件的id屬性,配置中透過執行selectKey會為user物件設定id屬性的值,所以看到控制檯輸出的id分別為:

    而資料庫中也會增加相應的值,表格資料變化如下:

  • 中秋節和大豐收的關聯?
  • 拉布拉多和金毛哪個比較好訓練,聽話懂事一點?