Skip to content

Commit 207d264

Browse files
authored
Merge pull request #754 from mybatis/3.x
Merge 3.x into master for releasing 3.0.0
2 parents f5cdcda + 6ce7d21 commit 207d264

15 files changed

+121
-132
lines changed

.github/workflows/ci.yaml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ name: Java CI
1818

1919
on:
2020
push:
21-
branches-ignore:
22-
- 'compatibility-check-spring6'
2321
pull_request:
2422

2523
jobs:
@@ -28,7 +26,7 @@ jobs:
2826
strategy:
2927
matrix:
3028
os: [ubuntu-latest, macOS-latest, windows-latest]
31-
java: [11, 17, 19, 20-ea]
29+
java: [17, 19, 20-ea]
3230
distribution: ['zulu']
3331
fail-fast: false
3432
max-parallel: 5

.github/workflows/coveralls.yaml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ name: Coveralls
1818

1919
on:
2020
push:
21-
branches-ignore:
22-
- 'compatibility-check-spring6'
2321
pull_request:
2422

2523
jobs:
@@ -31,7 +29,7 @@ jobs:
3129
- name: Set up JDK
3230
uses: actions/setup-java@v3
3331
with:
34-
java-version: 11
32+
java-version: 17
3533
distribution: zulu
3634
- name: Report Coverage to Coveralls for Pull Requests
3735
if: github.event_name == 'pull_request'

.github/workflows/support.yaml

Lines changed: 0 additions & 47 deletions
This file was deleted.

pom.xml

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
</parent>
2828

2929
<artifactId>mybatis-spring</artifactId>
30-
<version>2.1.0-SNAPSHOT</version>
30+
<version>3.0.0-SNAPSHOT</version>
3131
<packaging>jar</packaging>
3232

3333
<name>mybatis-spring</name>
@@ -104,14 +104,18 @@
104104
<gcu.product>Spring</gcu.product>
105105
<osgi.import>org.springframework.batch.*;resolution:=optional,*</osgi.import>
106106
<osgi.dynamicImport>*</osgi.dynamicImport>
107+
<java.version>17</java.version>
107108

108109
<mybatis.version>3.5.11</mybatis.version>
109-
<spring.version>5.3.24</spring.version>
110-
<spring-batch.version>4.3.7</spring-batch.version>
110+
<spring.version>6.0.2</spring.version>
111+
<spring-batch.version>5.0.0</spring-batch.version>
111112
<module.name>org.mybatis.spring</module.name>
112113

113114
<junit.version>5.9.1</junit.version>
114115

116+
<!-- Keep this setting until mybatis-parent 37 official released -->
117+
<maven.compiler.parameters>true</maven.compiler.parameters>
118+
115119
<!-- Reproducible Builds -->
116120
<project.build.outputTimestamp>1757561022</project.build.outputTimestamp>
117121
</properties>
@@ -297,13 +301,13 @@
297301
<dependency>
298302
<groupId>jakarta.transaction</groupId>
299303
<artifactId>jakarta.transaction-api</artifactId>
300-
<version>1.3.3</version>
304+
<version>2.0.1</version>
301305
<scope>test</scope>
302306
</dependency>
303307
<dependency>
304308
<groupId>jakarta.servlet</groupId>
305309
<artifactId>jakarta.servlet-api</artifactId>
306-
<version>4.0.4</version>
310+
<version>6.0.0</version>
307311
<scope>test</scope>
308312
</dependency>
309313

@@ -373,6 +377,40 @@
373377
<name>Sonatype OSS Snapshots Repository</name>
374378
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
375379
</repository>
380+
<repository>
381+
<id>spring-snapshot</id>
382+
<name>Spring Snapshots</name>
383+
<url>https://repo.spring.io/snapshot</url>
384+
<releases>
385+
<enabled>false</enabled>
386+
</releases>
387+
</repository>
388+
<repository>
389+
<id>spring-milestone</id>
390+
<name>Spring Milestone</name>
391+
<url>https://repo.spring.io/milestone</url>
392+
<snapshots>
393+
<enabled>false</enabled>
394+
</snapshots>
395+
</repository>
376396
</repositories>
377397

398+
<pluginRepositories>
399+
<pluginRepository>
400+
<id>spring-snapshot</id>
401+
<name>Spring Snapshots</name>
402+
<url>https://repo.spring.io/snapshot</url>
403+
<releases>
404+
<enabled>false</enabled>
405+
</releases>
406+
</pluginRepository>
407+
<pluginRepository>
408+
<id>spring-milestone</id>
409+
<name>Spring Milestone</name>
410+
<url>https://repo.spring.io/milestone</url>
411+
<snapshots>
412+
<enabled>false</enabled>
413+
</snapshots>
414+
</pluginRepository>
415+
</pluginRepositories>
378416
</project>

src/main/java/org/mybatis/spring/batch/MyBatisBatchItemWriter.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.mybatis.logging.Logger;
2828
import org.mybatis.logging.LoggerFactory;
2929
import org.mybatis.spring.SqlSessionTemplate;
30+
import org.springframework.batch.item.Chunk;
3031
import org.springframework.batch.item.ItemWriter;
3132
import org.springframework.beans.factory.InitializingBean;
3233
import org.springframework.core.convert.converter.Converter;
@@ -136,7 +137,7 @@ public void afterPropertiesSet() {
136137
* {@inheritDoc}
137138
*/
138139
@Override
139-
public void write(final List<? extends T> items) {
140+
public void write(final Chunk<? extends T> items) {
140141

141142
if (!items.isEmpty()) {
142143
LOGGER.debug(() -> "Executing batch with " + items.size() + " items.");
@@ -158,8 +159,8 @@ public void write(final List<? extends T> items) {
158159
for (int i = 0; i < updateCounts.length; i++) {
159160
int value = updateCounts[i];
160161
if (value == 0) {
161-
throw new EmptyResultDataAccessException(
162-
"Item " + i + " of " + updateCounts.length + " did not update any rows: [" + items.get(i) + "]", 1);
162+
throw new EmptyResultDataAccessException("Item " + i + " of " + updateCounts.length
163+
+ " did not update any rows: [" + items.getItems().get(i) + "]", 1);
163164
}
164165
}
165166
}

src/main/java/org/mybatis/spring/batch/MyBatisPagingItemReader.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,4 @@ protected void doReadPage() {
130130
results.addAll(sqlSessionTemplate.selectList(queryId, parameters));
131131
}
132132

133-
@Override
134-
protected void doJumpToPage(int itemIndex) {
135-
// Not Implemented
136-
}
137-
138133
}

src/test/java/org/mybatis/spring/MyBatisSpringTest.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import static org.junit.jupiter.api.Assertions.assertThrows;
2020
import static org.junit.jupiter.api.Assertions.fail;
2121

22-
import com.mockrunner.mock.ejb.MockUserTransaction;
2322
import com.mockrunner.mock.jdbc.MockConnection;
2423
import com.mockrunner.mock.jdbc.MockDataSource;
2524
import com.mockrunner.mock.jdbc.MockPreparedStatement;
@@ -32,12 +31,15 @@
3231
import org.apache.ibatis.transaction.managed.ManagedTransactionFactory;
3332
import org.junit.jupiter.api.AfterEach;
3433
import org.junit.jupiter.api.Test;
34+
import org.mockito.Mockito;
3535
import org.springframework.dao.DataAccessException;
3636
import org.springframework.dao.TransientDataAccessResourceException;
3737
import org.springframework.transaction.TransactionStatus;
3838
import org.springframework.transaction.jta.JtaTransactionManager;
3939
import org.springframework.transaction.support.DefaultTransactionDefinition;
4040

41+
import jakarta.transaction.UserTransaction;
42+
4143
class MyBatisSpringTest extends AbstractMyBatisSpringTest {
4244

4345
private SqlSession session;
@@ -275,7 +277,7 @@ void testChangeExecutorTypeInTxRequiresNew() throws Exception {
275277

276278
@Test
277279
void testWithJtaTxManager() {
278-
JtaTransactionManager jtaManager = new JtaTransactionManager(new MockUserTransaction());
280+
JtaTransactionManager jtaManager = new JtaTransactionManager(Mockito.mock(UserTransaction.class));
279281

280282
DefaultTransactionDefinition txDef = new DefaultTransactionDefinition();
281283
txDef.setPropagationBehaviorName("PROPAGATION_REQUIRED");
@@ -304,7 +306,7 @@ void testWithJtaTxManagerAndNonSpringTxManager() throws java.sql.SQLException {
304306
Environment nonSpring = new Environment("non-spring", new ManagedTransactionFactory(), mockDataSource);
305307
sqlSessionFactory.getConfiguration().setEnvironment(nonSpring);
306308

307-
JtaTransactionManager jtaManager = new JtaTransactionManager(new MockUserTransaction());
309+
JtaTransactionManager jtaManager = new JtaTransactionManager(Mockito.mock(UserTransaction.class));
308310

309311
DefaultTransactionDefinition txDef = new DefaultTransactionDefinition();
310312
txDef.setPropagationBehaviorName("PROPAGATION_REQUIRED");

src/test/java/org/mybatis/spring/batch/MyBatisBatchItemWriterTest.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,13 @@
2222
import java.time.Instant;
2323
import java.time.LocalDateTime;
2424
import java.time.ZoneId;
25-
import java.util.Arrays;
2625
import java.util.Collections;
2726
import java.util.HashMap;
2827
import java.util.List;
2928
import java.util.Map;
3029

3130
import org.apache.ibatis.executor.BatchResult;
3231
import org.apache.ibatis.session.ExecutorType;
33-
import org.assertj.core.util.Lists;
3432
import org.junit.jupiter.api.BeforeEach;
3533
import org.junit.jupiter.api.Test;
3634
import org.mockito.InjectMocks;
@@ -39,6 +37,7 @@
3937
import org.mockito.MockitoAnnotations;
4038
import org.mybatis.spring.SqlSessionTemplate;
4139
import org.mybatis.spring.batch.domain.Employee;
40+
import org.springframework.batch.item.Chunk;
4241
import org.springframework.dao.EmptyResultDataAccessException;
4342
import org.springframework.dao.InvalidDataAccessResourceUsageException;
4443

@@ -60,8 +59,8 @@ void setUp() {
6059

6160
@Test
6261
void testZeroBatchResultShouldThrowException() {
63-
List<Employee> employees = Arrays.asList(new Employee(), new Employee());
64-
List<BatchResult> batchResults = Lists.emptyList();
62+
Chunk<Employee> employees = Chunk.of(new Employee(), new Employee());
63+
List<BatchResult> batchResults = Collections.emptyList();
6564

6665
given(mockSqlSessionTemplate.flushStatements()).willReturn(batchResults);
6766

@@ -70,7 +69,7 @@ void testZeroBatchResultShouldThrowException() {
7069

7170
@Test
7271
void testZeroUpdateCountShouldThrowException() {
73-
List<Employee> employees = Arrays.asList(new Employee(), new Employee());
72+
Chunk<Employee> employees = Chunk.of(new Employee(), new Employee());
7473

7574
BatchResult batchResult = new BatchResult(null, null);
7675
batchResult.setUpdateCounts(new int[] { 1, 0 });
@@ -87,7 +86,7 @@ void testItemToParameterConverterIsDefault() {
8786
this.writer.setStatementId("updateEmployee");
8887

8988
Employee employee = new Employee();
90-
List<Employee> employees = Collections.singletonList(employee);
89+
Chunk<Employee> employees = Chunk.of(employee);
9190
writer.write(employees);
9291

9392
Mockito.verify(this.mockSqlSessionTemplate).update("updateEmployee", employee);
@@ -105,7 +104,7 @@ void testSetItemToParameterConverter() {
105104
});
106105

107106
Employee employee = new Employee();
108-
List<Employee> employees = Collections.singletonList(employee);
107+
Chunk<Employee> employees = Chunk.of(employee);
109108
writer.write(employees);
110109

111110
Map<String, Object> parameter = new HashMap<>();

src/test/java/org/mybatis/spring/batch/SpringBatchTest.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,10 @@
1717

1818
import static org.assertj.core.api.Assertions.*;
1919

20-
import java.util.ArrayList;
21-
import java.util.List;
22-
2320
import org.apache.ibatis.session.SqlSession;
2421
import org.junit.jupiter.api.Test;
2522
import org.mybatis.spring.batch.domain.Employee;
23+
import org.springframework.batch.item.Chunk;
2624
import org.springframework.beans.factory.annotation.Autowired;
2725
import org.springframework.beans.factory.annotation.Qualifier;
2826
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
@@ -56,7 +54,7 @@ class SpringBatchTest {
5654
@Test
5755
@Transactional
5856
void shouldDuplicateSalaryOfAllEmployees() throws Exception {
59-
List<Employee> employees = new ArrayList<>();
57+
Chunk<Employee> employees = new Chunk<>();
6058
Employee employee = pagingNoNestedItemReader.read();
6159
while (employee != null) {
6260
employee.setSalary(employee.getSalary() * 2);
@@ -73,7 +71,7 @@ void shouldDuplicateSalaryOfAllEmployees() throws Exception {
7371
@Transactional
7472
void checkPagingReadingWithNestedInResultMap() throws Exception {
7573
// This test is here to show that PagingReader can return wrong result in case of nested result maps
76-
List<Employee> employees = new ArrayList<>();
74+
Chunk<Employee> employees = new Chunk<>();
7775
Employee employee = pagingNestedItemReader.read();
7876
while (employee != null) {
7977
employee.setSalary(employee.getSalary() * 2);
@@ -91,7 +89,7 @@ void checkPagingReadingWithNestedInResultMap() throws Exception {
9189
void checkCursorReadingWithoutNestedInResultMap() throws Exception {
9290
cursorNoNestedItemReader.doOpen();
9391
try {
94-
List<Employee> employees = new ArrayList<>();
92+
Chunk<Employee> employees = new Chunk<>();
9593
Employee employee = cursorNoNestedItemReader.read();
9694
while (employee != null) {
9795
employee.setSalary(employee.getSalary() * 2);
@@ -112,7 +110,7 @@ void checkCursorReadingWithoutNestedInResultMap() throws Exception {
112110
void checkCursorReadingWithNestedInResultMap() throws Exception {
113111
cursorNestedItemReader.doOpen();
114112
try {
115-
List<Employee> employees = new ArrayList<>();
113+
Chunk<Employee> employees = new Chunk<>();
116114
Employee employee = cursorNestedItemReader.read();
117115
while (employee != null) {
118116
employee.setSalary(employee.getSalary() * 2);

0 commit comments

Comments
 (0)