真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么在MyBatis中實(shí)現(xiàn)主鍵回填

怎么在MyBatis中實(shí)現(xiàn)主鍵回填?相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計、成都做網(wǎng)站、漢源網(wǎng)絡(luò)推廣、微信平臺小程序開發(fā)、漢源網(wǎng)絡(luò)營銷、漢源企業(yè)策劃、漢源品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供漢源建站搭建服務(wù),24小時服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com

代碼如下:

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 對象,從這個游標(biāo)集中就可以獲取到剛剛插入數(shù)據(jù)的id。

這個是原生的寫法,在 MyBatis 中,對此需求提供了兩種不同的實(shí)現(xiàn)方案,下面分別來看。

框架寫法

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

  1. 主鍵自增長

  2. 自定義主鍵(一般可以使用UUID,或者類UUID)

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

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

方式一

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


  insert into t_book (b_name,author) values (#{name},#{author});

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

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

方式二

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


  
    SELECT LAST_INSERT_ID()
  
  insert into t_book (b_name,author) values (#{name},#{author});

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

看完上述內(nèi)容,你們掌握怎么在MyBatis中實(shí)現(xiàn)主鍵回填的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


當(dāng)前名稱:怎么在MyBatis中實(shí)現(xiàn)主鍵回填
文章轉(zhuǎn)載:http://weahome.cn/article/jdjssh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部