主鍵回填其實是乙個非常常見的需求程式設計客棧,特別是在資料新增的過程中,我們經常需要新增完資料之後,需要獲取剛剛新增的資料 id,無論是 jdbc 還是各種各樣的資料庫框架都對此提供了相關的支援,本文我就來和和大家分享下資料庫主鍵回填在 mybatis 中的兩種實現思路。
原生寫法
框架**於我們學過的基礎知識,主鍵回填實際上是乙個在 jdbc 中就被支援的寫法,有的小夥伴可能不知道這一點,因此這裡我先來說說在 jdbc 中如何實現主鍵回填。
jdbc 中實現主鍵回填其實非常容易,主要是在構造 preparedstatement 時指定需要主鍵回填,然後在插入成功後,查詢剛剛插入資料的 id ,示例**如下:
public int insert(person person)
return id;
}和普通的插入 sql 不同之處主要體現在兩個地方:
這個是原生的寫法,在 mybatis 中,對此需求提供了兩種不同的實現方案,下面分別來看。
框架寫法
一般情況下,主鍵有兩種生成方式:
如果是第二種,主鍵一般是在j**a**中生成,然後傳入資料庫執行插入操作,如果是第乙個主鍵自增長,此時,j**a 可能需要知道資料新增成功後的主鍵。
mybatis 的基本用法就無需多說了,這也不是本文的重點,我們還是來看看 mybatis 中主鍵回填的兩種不同實現方式吧!
方式一第一種方式比較簡單,也是松哥推薦的一種實現方式:
insert into t_book (b_name,author) values (#,#);
這種方式比較簡單,就是在插入節點上新增 usegeneratedkeys 屬性,同時設定接收回傳主鍵的屬性。配置完成後,我們執行乙個插入操作,插入時傳入乙個物件,插入完成後,這個物件的 id 就會被自動賦值,值就是剛剛插入成功的id。
推薦大家使用這種方式,原因很簡單,這種方式實現簡便省事。
方式二第二種方式則是利用mysql自帶的 last_insert_id() 函式查詢剛剛插入的id,示例**如下:
程式設計客棧www.cppcns.comsert id="insertbook">
select last_insert_id()
insert into t_book (b_name,author) values (#,#);
這種方式是在 insert 節點中新增 selectkey 來實現主鍵回填,實際上這種方式的功能更加豐富,因為 selectkey 節點中的 sql 我們既可以在插入之前執行,也可以在插入之後執行(通過設定節點的 order 屬性為 after 或者 before 可以實現),具體什麼時候執行,還是要看具體的需求,如果是做主鍵回填,我們當然需要在插入 sql 執行之後執行 selectkey 節點中的 sql。
注意第二種方式一樣也要通過設定 keyproperty 來指定將查詢到的資料繫結到哪個屬性上。
總結本文標題: 詳解mybatis中主鍵回填的兩種實現方式
本文位址:
MyBatis主鍵回填和自定義主鍵
1.主鍵回填jdbc中的statement物件在執行插入的sql後,可以通過getgeneratedkeys方法獲得資料庫生成的主鍵,這樣便能達到獲取主鍵的功能。在insert語句中,有乙個開關屬性 usegeneratedkeys,用來控制是否開啟這個功能,它的預設值是false。當開啟了這個開關...
主鍵回填的幾種方式
jdbc原生寫法 connection con null preparedstatement pa null resultset rs null con jdbcutils.getconnection ps con.preparestatement insert into person userna...
Mybatis學習筆記(三)之主鍵回填 一對一對映
在mysql資料庫中主鍵id自增後,再次得到資料庫生成的主鍵值。使用方法如下 使用keyproperty屬性指定是哪個主鍵字段,同時使用usegeneratedkeys屬性告訴這個主鍵是否使用資料庫內建策略生成。乙個學生,對應乙個成績,表 stu有乙個id 列,是 score表的外來鍵,學生和成績之...