sql >> Database >  >> RDS >> Mysql

Batch invoegen met native SQL in Hibernate

Slaapstand heeft een Batch-functionaliteit. Maar in het bovenstaande geval gebruik ik Native SQL, volgens mijn observatie is de slaapstand-batch niet veel effectief in het geval van Native SQL. Ja, het vermijdt zeker de geheugenfout, maar verbetert niet veel prestaties. Vandaar Ik trok me terug om JDBC Batch in Hibernate te implementeren. Hibernate biedt methode doWork() om verbinding te krijgen vanuit de sluimerstand.

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();


  1. Gebruik APP_NAME() om de toepassingsnaam van de huidige sessie in SQL Server op te halen

  2. Problemen met MySQL-definer oplossen

  3. Draaitabel met MySQL

  4. Hoe bepaal ik de laatste dag van de vorige maand met PostgreSQL?