日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
MyBatis中主鍵回填實現(xiàn)方法

主鍵回填一般用于增加操作中,把插入數(shù)據(jù)時插入為null的主鍵id數(shù)據(jù)填回去,存入到j(luò)ava對象和主鍵對應(yīng)的屬性中(數(shù)據(jù)庫主鍵字段為id則回填的是實體類的id屬性),實現(xiàn)添加+查詢主鍵一步到位。

成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計、成都外貿(mào)網(wǎng)站建設(shè)服務(wù),網(wǎng)站設(shè)計,網(wǎng)站托管維護等一站式綜合服務(wù)型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競爭對手中脫穎而出成都創(chuàng)新互聯(lián)公司

原生寫法

框架來源于我們學(xué)過的基礎(chǔ)知識,主鍵回填實際上是一個在 JDBC 中就被支持的寫法,有的小伙伴可能不知道這一點,因此這里我先來說說在 JDBC 中如何實現(xiàn)主鍵回填。

JDBC 中實現(xiàn)主鍵回填其實非常容易,主要是在構(gòu)造 PreparedStatement 時指定需要主鍵回填,然后在插入成功后,查詢剛剛插入數(shù)據(jù)的 id ,示例代碼如下:

public int insert(Person person) {
   Connection con = null;
   PreparedStatement ps = null;
   ResultSet rs = null;
   con = DBUtils.getConnection();
   ps = con.prepareStatement("INSERT INTO person(username,password,money) VALUES(?,?,?)", PreparedStatement.RETURN_GENERATED_KEYS);
   ps.setObject(1, person.getUsername());
   ps.setObject(2, person.getPassword());
   ps.setObject(3, person.getMoney());
   int i = ps.executeUpdate();
   rs = ps.getGeneratedKeys();
   int id = -1;
   if (rs.next()) {
       id = rs.getInt(1);
   }
   return id;
}

和普通的插入 SQL 不同之處主要體現(xiàn)在兩個地方:

第一個是構(gòu)造 PreparedStatement 時,多了一個參數(shù),指定了需要主鍵回填。 在更新操作執(zhí)行完成之后,調(diào)用 getGeneratedKeys ,然后又會獲取到一個 ResultSet 對象,從這個游標集中就可以獲取到剛剛插入數(shù)據(jù)的id。 這個是原生的寫法,在 MyBatis 中,對此需求提供了兩種不同的實現(xiàn)方案,下面分別來看。

框架寫法

一般情況下,主鍵有兩種生成方式:

  • 主鍵自增長
  • 自定義主鍵(一般可以使用UUID,或者類UUID)

如果是第二種,主鍵一般是在Java代碼中生成,然后傳入數(shù)據(jù)庫執(zhí)行插入操作,如果是第一個主鍵自增長,此時,Java 可能需要知道數(shù)據(jù)添加成功后的主鍵。

MyBatis 的基本用法就無需多說了,這也不是本文的重點,我們還是來看看 MyBatis 中主鍵回填的兩種不同實現(xiàn)方式吧!

方式一

第一種方式比較簡單,也是松哥推薦的一種實現(xiàn)方式:


  
   "insertBook" useGeneratedKeys=
   "true" keyProperty=
   "id">    insert into t_book (b_name,author) values (
   #{name},#{author}); 
  

這種方式比較簡單,就是在插入節(jié)點上添加 useGeneratedKeys 屬性,同時設(shè)置接收回傳主鍵的屬性。配置完成后,我們執(zhí)行一個插入操作,插入時傳入一個對象,插入完成后,這個對象的 id 就會被自動賦值,值就是剛剛插入成功的id。

松哥推薦大家使用這種方式,原因很簡單,這種方式實現(xiàn)簡便省事。

方式二

第二種方式則是利用MySQL自帶的 last_insert_id() 函數(shù)查詢剛剛插入的id,示例代碼如下:


  
   "insertBook">    
   
    "id" resultType=
    "java.lang.Integer">        SELECT LAST_INSERT_ID()    
       insert into t_book (b_name,author) values (
   #{name},#{author}); 
  

這種方式是在 insert 節(jié)點中添加 selectKey 來實現(xiàn)主鍵回填,實際上這種方式的功能更加豐富,因為 selectKey 節(jié)點中的 SQL 我們既可以在插入之前執(zhí)行,也可以在插入之后執(zhí)行(通過設(shè)置節(jié)點的 Order 屬性為 AFTER 或者 BEFORE 可以實現(xiàn)),具體什么時候執(zhí)行,還是要看具體的需求,如果是做主鍵回填,我們當然需要在插入 SQL 執(zhí)行之后執(zhí)行 selectKey 節(jié)點中的 SQL。

注意第二種方式一樣也要通過設(shè)置 keyProperty 來指定將查詢到的數(shù)據(jù)綁定到哪個屬性上。


新聞名稱:MyBatis中主鍵回填實現(xiàn)方法
當前URL:http://www.dlmjj.cn/article/djspppg.html