在Hibernate中使用本机SQL批量插入

发布于 2021-02-01 12:35:50

我想使用Hibernate Native SQL在数据库中插入记录。代码如下

 Session session = sessionFactory.openSession();
 Transaction tx = session.beginTransaction();

String sqlInsert = "insert into sampletbl (name) values (?) ";
for(String name : list){
   session.createSQLQuery( sqlInsert )
          .setParameter(1,name)
          .executeUpdate();
} 
tx.commit();
session.close();

上面的代码工作正常,我认为这不是最好的方法。如果有的话,请给我另一种可能的方法。谢谢

关注者
0
被浏览
73
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    Hibernate具有批处理功能。但是在以上情况下,我使用的是Native SQL,根据我的观察,hibernate批处理对于Native
    SQL并不是很有效。是的,可以肯定的是它可以避免内存不足错误,但不会提高性能。因此,我退缩到在Hibernate中实现JDBC
    Batch.Hibernate提供了doWork()从Hibernate Session获取连接的方法。

    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
    //get Connction from Session
    session.doWork(new Work() {
           @Override
           public void execute(Connection conn) throws SQLException {
              PreparedStatement pstmt = null;
              try{
               String sqlInsert = "insert into sampletbl (name) values (?) ";
               pstmt = conn.prepareStatement(sqlInsert );
               int i=0;
               for(String name : list){
                   pstmt .setString(1, name);
                   pstmt .addBatch();
    
                   //20 : JDBC batch size
                 if ( i % 20 == 0 ) { 
                    pstmt .executeBatch();
                  }
                  i++;
               }
               pstmt .executeBatch();
             }
             finally{
               pstmt .close();
             }                                
         }
    });
    tx.commit();
    session.close();
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看