JDBC рдФрд░ HIBERNATE рдореЗрдВ рдмреИрдЪ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

рдирдорд╕реНрдХрд╛рд░!


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ SQL (DML) рдХрдердиреЛрдВ рдХреЗ рдмреИрдЪ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛: INSERT, UPDATE, DELETE, рдПрдХ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдврд╝рд╛ рд╣реБрдЖ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред




рд▓рд╛рдн


рдкреНрд░рддреНрдпреЗрдХ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╡рд┐рдкрд░реАрдд, рдмреИрдЪ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕реЗ рдПрдХ рдХреЙрд▓ рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрдВ (рдкреИрдХреЗрдЯ) рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕реЗрдЯ рднреЗрдЬрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░реЗрдВ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдбрд╛рд▓рдиреЗ, рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдпрд╛ рд╣рдЯрд╛рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рднрд╛рд╡ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



DB рддрд╛рд▓рд┐рдХрд╛


рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдЖрдИрдбреА рдФрд░ рд╢реАрд░реНрд╖рдХ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдкреБрд╕реНрддрдХ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред


рдЖрдИрдбреАрд╢реАрд░реНрд╖рдХ
10001рдЬрд╛рд╡рд╛ рдкрд░реНрд╕рд┐рд╕реНрдЯреЗрдВрд╕ рдПрдкреАрдЖрдИ рдФрд░ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ
10002рдирдИ рдмрд┐рдЧ рд╕реАрдПрд╕рдПрд╕ рдмреБрдХ
10003рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд┐рдВрдЧ 5
10004рдЬрд╛рд╡рд╛ рдкреНрд░рднрд╛рд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ

1. JDBC - рдмреИрдЪ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ


рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:


  1. JDBC , supportsBatchUpdates() DatabaseMetaData, , . true, .
  2. , setAutoCommit(false). , commit() rollback(). rollback() SQL .
  3. тАФ , JDBC Statement, PreparedStatement CallableStatement, .

, Statement, PreparedStatement CallableStatement . , BATCH_SIZE. , . , , Hibernate 10 50.


, SQL INSERT. UPDATE, DELETE .



1.1. Statement


Statement book.


connection.setAutoCommit(false);
try (Statement stmt = connection.createStatement()) { //(1)
    for (int i = 1; i <= SIZE; i++) {
        stmt.addBatch("INSERT INTO book (title) VALUES ('" + "JDBC Insert Example: " + i + "')"); //(2)
        if (i % BATCH_SIZE == 0 || i == SIZE) {
            try {
                int[] result = stmt.executeBatch(); //(3)
                connection.commit();
            } catch (BatchUpdateException ex) {
                Log(ex);
                connection.rollback();
            }
        }
    }
}

:

  1. C Statement;
  2. C void addBatch( String SQL );
  3. executeBatch(). executeBatch() .


Statement SQL INSERT, UPDATE, DELETE.



SQL , .



1.2. PreparedStatement


PreparedStatement book.


connection.setAutoCommit(false);
try (PreparedStatement pstmt = connection.prepareStatement("INSERT INTO book (title) VALUES (?)")) { //(1)
    for (int i = 1; i <= SIZE; i++) {
        pstmt.setString(1, "JDBC Insert Example: " + i); //(2)
        pstmt.addBatch(); //(3)
        if (i % BATCH_SIZE == 0 || i == SIZE) {
            try {
                int[] result = pstmt.executeBatch(); //(4)
                connection.commit();
            } catch (BatchUpdateException ex) {
                Log(ex);
                connection.rollback();
            }
        }
    }
}

:

  1. C PreparedStatement SQL ;
  2. , ;
  3. void addBatch();
  4. executeBatch().

3) 4) , Statement, тАФ addBatch() .




SQL , , . , .



PreparedStatement SQL (INSERT, UPDATE, DELETE) Statement, - .



1.3. CallableStatement


CallableStatement .


, OUT INOUT.


CallableStatement book.


connection.setAutoCommit(false);
try (CallableStatement cstmt = connection.prepareCall("call insert_book(?)")) { //(1)
    for (int i = 1; i <= SIZE; i++) {
        cstmt.setString(1, "JDBC Insert Example: " + i); //(2)
        cstmt.addBatch(); //(3)
        if (i % BATCH_SIZE == 0 || i == SIZE) {
            try {
                int[] result = cstmt.executeBatch(); //(4)
                connection.commit();
            } catch (BatchUpdateException ex) {
                Log(ex);
                connection.rollback();
            }
        }
    }
}

:

  1. C CallableStatement ;
  2. , ;
  3. void addBatch();
  4. executeBatch().

, PreparedStatement.



, , .


- , .



CallableStatement , - .


1.4. BatchUpdateException


BatchUpdateException, . BatchUpdateException , SQL , - , ResultSet. BatchUpdateException ( getUpdateCounts()), , executeBatch. , SQL . , c (Statement.EXECUTE_FAILED) .


:


...
} catch (BatchUpdateException ex) {
    int[] updateCount = ex.getUpdateCounts();
    int count = 1;
    for (int i : updateCount) {
        if (i == Statement.EXECUTE_FAILED) {
            System.out.println("Request " + count + ": Execute failed");
        } else {
            System.out.println("Request " + count + ": OK");
        }
        count++;
    }
}
...

. , , , , . BatchUpdateException SQL , . .


2. Hibernate тАФ


2.1.


, , hibernate.jdbc.batch_size Hibernate.cfg.xml . Hibernate SQL INSERT, UPDATE, DELETE JDBC . SQL JDBC hibernate.order_inserts, hibernate.order_updates true, Hibernate SQL . SQL , JDBC Hibernate addBatch() PreparedStatement, SQL .


Hibernate.cfg.xml


...
<property name="hibernate.jdbc.batch_size">50</property>
<property name="hibernate.order_inserts">true</property>
<property name="hibernate.order_updates">true</property>
...

2.2.


. , . , Hibernate , OutOfMemoryException. 2 :


  1. flush() clear() .

    :


    try (Session session = HibernateUtil.getSessionFactory().getCurrentSession()) {
        Transaction transaction = session.getTransaction();
        transaction.begin();
        for (int i = 1; i <= SIZE; i++) {
            session.persist(new Book("Hibernate Insert Example: " + i));
            if (i % BATCH_SIZE == 0) {
                // Flush and clear the cache every batch
                session.flush();
                session.clear();
            }
        }
        transaction.commit();
    }
    

  2. StatelessSession. StatelessSession . , , , (aliasing) . , Hibernate. Hibernate.

    :


    try (StatelessSession session = HibernateUtil.getSessionFactory().openStatelessSession()) {
        Transaction transaction = session.getTransaction();
        transaction.begin();
        for (int i = 1; i <= SIZE; i++) {
            session.persist(new Book("Hibernate Insert Example: " + i));
        }
        transaction.commit();
    }
    



рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдмреИрдЪ рдирд┐рд╖реНрдкрд╛рджрди рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рд┐рджреНрдз рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЖрдкрдХреЛ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рдХрд░рдирд╛ рдФрд░ рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдХреЛ рдмрдврд╝рд╛рдирд╛ рдмреИрдЪ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд▓рд╕ рд╣реИред


рдХреЛрдб рдЙрджрд╛рд╣рд░рдг GitHub рдкрд░ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред


All Articles