@Test public void shouldResetCounterAfterCommit() { DbSession mybatisSession = mock(DbSession.class); BatchSession session = new BatchSession(mybatisSession, 10); for (int i = 0; i < 35; i++) { session.insert("id" + i); } verify(mybatisSession, times(3)).commit(); session.close(); } }
private BatchSession increment() { count += 1; if (count >= batchSize) { commit(); } return this; }
@Override public <T> T getMapper(Class<T> type) { return getConfiguration().getMapper(type, this); }
@Override public int insert(String statement, Object parameter) { makeSureGeneratedKeysAreNotUsedInBatchInserts(statement); increment(); return super.insert(statement, parameter); }
@Override public void select(String statement, Object parameter, ResultHandler handler) { reset(); super.select(statement, parameter, handler); }
@Test public void shouldCommitWhenReachingBatchSizeWithoutCommits() { DbSession mybatisSession = mock(DbSession.class); BatchSession session = new BatchSession(mybatisSession, 10); for (int i = 0; i < 9; i++) { session.delete("delete something"); verify(mybatisSession, never()).commit(); verify(mybatisSession, never()).commit(anyBoolean()); } session.delete("delete something"); verify(mybatisSession).commit(); session.close(); }
@Override public int update(String statement, Object parameter) { increment(); return super.update(statement, parameter); }
public DbSession openSession(boolean batch) { if (batch) { SqlSession session = sessionFactory.openSession(ExecutorType.BATCH, TransactionIsolationLevel.READ_COMMITTED); return new BatchSession(session); } SqlSession session = sessionFactory.openSession(ExecutorType.REUSE, TransactionIsolationLevel.READ_COMMITTED); return new DbSessionImpl(session); }
@Override public <T> T selectOne(String statement, Object parameter) { reset(); return super.selectOne(statement, parameter); }
@Override public int insert(String statement) { makeSureGeneratedKeysAreNotUsedInBatchInserts(statement); increment(); return super.insert(statement); }
@Override public int delete(String statement, Object parameter) { increment(); return super.delete(statement, parameter); }
/** * @since 4.4 */ public DbSession openSession(boolean batch) { if (batch) { SqlSession session = sessionFactory.openSession(ExecutorType.BATCH); return new BatchSession(session); } SqlSession session = sessionFactory.openSession(ExecutorType.REUSE); return new DbSession(session); }
@Override public <E> List<E> selectList(String statement) { reset(); return super.selectList(statement); }
@Override public int insert(String statement, Object parameter) { makeSureGeneratedKeysAreNotUsedInBatchInserts(statement); increment(); return super.insert(statement, parameter); }
@Test public void shouldCommitWhenReachingBatchSize() { DbSession mybatisSession = mock(DbSession.class); BatchSession session = new BatchSession(mybatisSession, 10); for (int i = 0; i < 9; i++) { session.insert("id" + i); verify(mybatisSession).insert("id" + i); verify(mybatisSession, never()).commit(); verify(mybatisSession, never()).commit(anyBoolean()); } session.insert("id9"); verify(mybatisSession).commit(); session.close(); }
@Override public int delete(String statement) { increment(); return super.delete(statement); }
private BatchSession increment() { count += 1; if (count >= batchSize) { commit(); } return this; }
@Override public <T> T getMapper(Class<T> type) { return getConfiguration().getMapper(type, this); }
@Override public <K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey) { reset(); return super.selectMap(statement, parameter, mapKey); }
@Override public int insert(String statement) { makeSureGeneratedKeysAreNotUsedInBatchInserts(statement); increment(); return super.insert(statement); }