MyBatis向Oracle添加多條資料____Oracle

來源:互聯網
上載者:User

文章轉載自:https://www.thinksaas.cn/group/topic/98721/

項目中會遇到這樣的情況,一次性要插入多條資料到資料庫中,下面就拿Data類來看看兩種插入方法:

 

方法一:

  Mybatis本身只支援逐條插入,比較笨的方法,就是遍曆一個List,迴圈中逐條插入,比如下面這段代碼

 

for(Data d : ListData) {dataMapper.insertSelective(d);}

  這樣做的後果就是效率嚴重低下,因為每次迴圈都要向資料庫提交一次,資料少的時候看不出來,但是如果上千條,花費的時間就相當多了

 

方法二:

  Mybatis本身是很靈活的,因為可以自己在XML檔案中編寫sql進行操作,那就可以一次性將插入到資料庫中,這樣只用向資料庫提交一次,效能也可以提高不少。下面來看一個例子:

  首先,在DataMapper.java 介面類中加入介面:

int batchInsert(List<Data> datas);

 

  然後,在DataMapper.xml 中編寫對應的實現sql,我使用的是oracle,如果是mysql或sqlserver,可能sql語句會略有區別吧:

<insert id="batchInsert"parameterType="java.util.List">  insert into DATA (ID, TEXT, STAUTS)  <foreach close=")"collection="list"item="item"index="index"open="("separator="union"> select#{item.id,jdbcType=VARCHAR},#{item.text,jdbcType=VARCHAR},#{item.stauts,jdbcType=VARCHAR} from dual </foreach></insert>

 

  最後,在需要批量插入Data資料的地方調用介面:

dataMapper.batchInsert(ListData);

 

  說明一下xml檔案的實現,使用foreach標籤,是用來拼接內部的字串,item就相當於一個指標,用來遍曆list中的對象,將每一個item的屬性值複製給內部sql之後,用union拼接起來,一次性執行一個長的sql語句。   如果我們從後台列印sql執行語句的話,會看到這樣的sql語句

insert into DATA (ID, TEXT, STAUTS) (select ?, ?, ? from dual union select ?, ?, ? from dual union select ?, ?, ? from dual )

  相對於第一個方法,第二個方法的代碼量要多出很多,但是從效能方面考慮,不管插入多少條資料,都只用向資料庫提交一次,這樣效率就會大幅提升。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.