1. 程式人生 > >spring JDBCTemplate 批量插入 返回id 批量插入返回批量id

spring JDBCTemplate 批量插入 返回id 批量插入返回批量id

1.插入一條記錄返回剛插入記錄的id

Java程式碼  收藏程式碼
  1. public int addBean(final Bean b){  
  2.         final String strSql = "insert into buy(id,c,s,remark,line,cdatetime," +  
  3.                 "c_id,a_id,count,type) values(null,?,?,?,?,?,?,?,?,?)";  
  4.         KeyHolder keyHolder = new GeneratedKeyHolder();  
  5.         this.getJdbcTemplate().update(  
  6.                 new PreparedStatementCreator(){  
  7.                     public java.sql.PreparedStatement createPreparedStatement(Connection conn) throws SQLException{  
  8.                         int i = 0;  
  9.                         java.sql.PreparedStatement ps = conn.prepareStatement(strSql);   
  10.                         ps = conn.prepareStatement(strSql, Statement.RETURN_GENERATED_KEYS);  
  11.                         ps.setString(++i, b.getC());  
  12.                         ps.setInt(++i,b.getS() );  
  13.                         ps.setString(++i,b.getR() );  
  14.                         ps.setString(++i,b.getline() );  
  15.                         ps.setString(++i,b.getCDatetime() );  
  16.                         ps.setInt(++i,b.getCId() );  
  17.                         ps.setInt(++i,b.getAId());  
  18.                         ps.setInt(++i,b.getCount());  
  19.                         ps.setInt(++i,b.getType());  
  20.                         return ps;  
  21.                     }  
  22.                 },  
  23.                 keyHolder);  
  24.         return keyHolder.getKey().intValue();  
  25.     }  

 2.批量插入資料

Java程式碼  收藏程式碼
  1. public void addBuyBean(List<BuyBean> list)   
  2.     {   
  3.        final List<BuyBean> tempBpplist = list;   
  4.        String sql="insert into buy_bean(id,bid,pid,s,datetime,mark,count)" +  
  5.             " values(null,?,?,?,?,?,?)";   
  6.        this.getJdbcTemplate().batchUpdate(sql,new BatchPreparedStatementSetter() {  
  7.             @Override  
  8.             public int getBatchSize() {  
  9.                  return tempBpplist.size();   
  10.             }  
  11.             @Override  
  12.             public void setValues(PreparedStatement ps, int i)  
  13.                     throws SQLException {  
  14.                   ps.setInt(1, tempBpplist.get(i).getBId());   
  15.                   ps.setInt(2, tempBpplist.get(i).getPId());   
  16.                   ps.setInt(3, tempBpplist.get(i).getS());   
  17.                   ps.setString(4, tempBpplist.get(i).getDatetime());   
  18.                   ps.setString(5, tempBpplist.get(i).getMark());                   
  19.                   ps.setInt(6, tempBpplist.get(i).getCount());  
  20.             }   
  21.       });   
  22.     }  

 3.批量插入並返回批量id

注:由於JDBCTemplate不支援批量插入後返回批量id,所以此處使用jdbc原生的方法實現此功能

Java程式碼  收藏程式碼
  1. public List<Integer> addProduct(List<ProductBean> expList) throws SQLException {  
  2.        final List<ProductBean> tempexpList = expList;  
  3.        String sql="insert into product(id,s_id,status,datetime,"  
  4.             + " count,o_id,reasons"  
  5.             + " values(null,?,?,?,?,?,?)";  
  6.        DbOperation dbOp = new DbOperation();  
  7.        dbOp.init();  
  8.        Connection con = dbOp.getConn();  
  9.        con.setAutoCommit(false);  
  10.        PreparedStatement pstmt = con.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);  
  11.        for (ProductBean n : tempexpList) {  
  12.            pstmt.setInt(1,n.getSId());     
  13.            pstmt.setInt(2,n.getStatus());   
  14.            pstmt.setString(3,n.getDatetime());   
  15.            pstmt.setInt(4,n.getCount());  
  16.            pstmt.setInt(5,n.getOId());  
  17.            pstmt.setInt(6,n.getReasons());  
  18.            pstmt.addBatch();  
  19.        }  
  20.        pstmt.executeBatch();   
  21.        con.commit();     
  22.        ResultSet rs = pstmt.getGeneratedKeys(); //獲取結果  
  23.        List<Integer> list = new ArrayList<Integer>();   
  24.        while(rs.next()) {  
  25.            list.add(rs.getInt(1));//取得ID  
  26.        }  
  27.        con.close();  
  28.        pstmt.close();  
  29.        rs.close();  
  30.        return list;  
  31. }  

以上三組程式碼直接複製把對應的實體類名一改就可以直接使用在專案中,希望對大家有幫助

相關推薦

spring JDBCTemplate實現批量插入返回id

1、插入一條記錄返回剛插入記錄的id public int addBean(final Bean b){ final String strSql = "insert into buy(id,c,s,remark,line,cdatet

spring JDBCTemplate 批量插入 返回id 批量插入返回批量id

1.插入一條記錄返回剛插入記錄的id Java程式碼   public int addBean(final Bean b){           final String strSql = "insert into buy(id,c,s,remark,line,cdatetime," +     

spring jdbcTemplate insert插入Oracle數據庫後返回當前主鍵id

spring bsp java ntc oracl statement ava head ora 最近做一個spring版本3.0.4的老項目功能,應用場景要用到jdbctemplate插入oracle表後返回主鍵ID拿來和其他表關聯。 用oralce的可以一直用這種處理

Spring JdbcTemplate 批量插入操作

做專案中碰到一個批量資料插入,給自己提個醒做個記錄。 框架是:spring+mybatis+oracle 1.一開始我是拿SqlSessionTemplate 去操作insert mybatis用的迴圈list的方式。結果發現只能插入6000條,超過6000的時候會報記憶體溢位,具體原因也沒搞清

spring Jdbctemplate返回插入記錄的自增Id

通常情況下我們在程式中往資料庫插入記錄,如果主鍵id是由資料庫負責生成,在插入成功之後都是返回主鍵id方便在插入其它資料時做主鍵關聯,spring Jdbctemplate對這個也是支援的,主要程式碼如下: public int insertTable(LabelForm

mybatis 獲取insert 返回的主鍵 和批量插入insert

mybatis 獲取insert 返回的主鍵 id <insert id="insertSelective" parameterType="com.vip.collection.manager.sms.entity.SmsTask" > insert into s

spring jdbcTemplate 插入物件返回主鍵值

/** * 插入一個物件,並返回這個物件的自增id * @param obj * @return */ public <T> int insertObjectAndGetAutoIncreaseId(T obj)

MyBatis中批量插入數據對插入記錄數的限制

技術分享 計算 分享圖片 作者 性能 探討 info itl bubuko 《基於Mybatis框架的批量數據插入的性能問題的探討》(作者:魏靜敏 劉歡傑 來源:《計算機光盤軟件與應用》 2013 年第 19 期)中提到批量插入的記錄數不能超過1000條,實測可以插入超過1

mybatis插入數據後返回自增的主鍵id

pre tails isp entity CA ctc ron creat rod 在插入數據時候想自動返回mysql的自增的主鍵,需要在mapper.xml中配置下; <insert id="insert" parameterType="com.rograndec.

插入數據返回自增id插入更新二合一

art tint statement next cat 方法 存在 lse https 原文https://blog.csdn.net/dumzp13/article/details/50984413 JDBC: con.setAutoCommit(false);

xorm插入數據庫後返回主鍵自增id

分享 utf8 mage span import bsp ima utf orm golang使用xorm連接數據庫後,插入結構體,無法返回自增主鍵id,飯後的主鍵id都是0。經過研究發現,如果給結構體id設置xorm tag,則會默認id為0,不會返回插入成功後的主鍵id

Spring JDBCtemplate.batchupdate 批量跟新資料 例項

public class BatchUpdate{     JdbcTemplate jdbctemp; //JdbcTemplate的獲取不是我所講的範圍。我們只管用spring得這一物件,     public static void main(String[] arg

Spring JdbcTemplate批量操作

使用SimpleJdbcTemplate進行批量操作 SimpleJdbcTemplate類提供了另外一種批量操作的方式。無需實現一個特定的介面,你只需要提供所有在呼叫過程中要用到的引數,框架會遍歷這些引數值,並使用內建的prepared statement類進行批量操作。API將根據你是否使用

用註解的方式實現Mybatis插入資料時返回自增的主鍵Id

一、背景 我們在資料庫表設計的時候,一般都會在表中設計一個自增的id作為表的主鍵。這個id也會關聯到其它表的外來鍵。 這就要求往表中插入資料時能返回表的自增id,用這個ID去給關聯表的欄位賦值。下面講一下如何通過註解的方式實現插入資料時返回自增Id。 二、

MySQL批量千萬級資料SQL插入效能優化

       對於一些資料量較大的系統,資料庫面臨的問題除了查詢效率低下,還有就是資料入庫時間長。特別像報表系統,可能每天花費在資料匯入上的時間就會長達幾個小時之久。因此,優化資料庫插入效能是很有意義的。        網路上的牛人很多,總會有一些手段可以提高inser

spring JdbcTemplate批量更新

  spring JdbcTemplate 的批量更新: 1、JdbcTemplate batchUpdate(new String[]{}); 一次執行多個sql語句; 2、 Java程式碼   final List tmpList = ....;   int co

Spring JdbcTemplate批量更新速度很慢的問題

由於一次要執行很多條插入語句(5w條),通常通過mysql寫原生的插入語句會有類似的格式: insert into TableAAA(f1,f2) values (f11v,f21v),(f12v,

Spring POI批量匯出Excel,壓縮zip,返回下載zip路徑

瞭解springPOI匯出excel 話不多,放碼過來 application.yml配置檔案 zipfilepath: #path: /export/data/www/zip path: E:\2345Downloads http: http://devh5.war

利用python指令碼批量生成測試資料並插入資料庫

測試工作中有時候需要做一些假的測試資料,有些資料很多,上千條,手工做的話能累到你懷疑人生!這時候就該想到可以利用python指令碼來實現啦方法一:先寫入txt 然後用sql迴圈執行1.首先python連結資料庫有第三方的庫首先你要安裝pymysql(連結mysql用的),安裝

使用spring jdbcTemplate 批量查詢校驗【支援50萬資料】使用JDBC不會造成記憶體溢位

1.使用spring jdbcTemplate做批量校驗 (支援50萬資料) public void mxCheck(String tableName,Map<String,String> checkMap) {