Skip to content

Commit d4005a7

Browse files
committed
Coverage
1 parent 3ade4fe commit d4005a7

File tree

8 files changed

+99
-23
lines changed

8 files changed

+99
-23
lines changed

pom.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@
5858
<properties>
5959
<java.version>17</java.version>
6060
<java.release.version>17</java.release.version>
61+
<java.test.version>17</java.test.version>
62+
<java.test.release.version>17</java.test.release.version>
6163
<junit.jupiter.version>5.11.1</junit.jupiter.version>
6264
<spring.batch.version>5.1.2</spring.batch.version>
6365

src/main/java/org/mybatis/dynamic/sql/render/RenderingContext.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -57,30 +57,27 @@ private String nextMapKey() {
5757
return renderingStrategy.formatParameterMapKey(sequence);
5858
}
5959

60-
private String renderedPlaceHolder(String mapKey) {
61-
return renderingStrategy.getFormattedJdbcPlaceholder(calculatedParameterName, mapKey);
62-
}
63-
6460
private <T> String renderedPlaceHolder(String mapKey, BindableColumn<T> column) {
6561
return column.renderingStrategy().orElse(renderingStrategy)
6662
.getFormattedJdbcPlaceholder(column, calculatedParameterName, mapKey);
6763
}
6864

65+
public RenderedParameterInfo calculateFetchFirstRowsParameterInfo() {
66+
String mapKey = renderingStrategy.formatParameterMapKeyForFetchFirstRows(sequence);
67+
return new RenderedParameterInfo(mapKey,
68+
renderingStrategy.getFormattedJdbcPlaceholderForPagingParameters(calculatedParameterName, mapKey));
69+
}
70+
6971
public RenderedParameterInfo calculateLimitParameterInfo() {
7072
String mapKey = renderingStrategy.formatParameterMapKeyForLimit(sequence);
7173
return new RenderedParameterInfo(mapKey,
72-
renderingStrategy.getFormattedJdbcPlaceholderForLimitOrOffset(calculatedParameterName, mapKey));
74+
renderingStrategy.getFormattedJdbcPlaceholderForPagingParameters(calculatedParameterName, mapKey));
7375
}
7476

7577
public RenderedParameterInfo calculateOffsetParameterInfo() {
7678
String mapKey = renderingStrategy.formatParameterMapKeyForOffset(sequence);
7779
return new RenderedParameterInfo(mapKey,
78-
renderingStrategy.getFormattedJdbcPlaceholderForLimitOrOffset(calculatedParameterName, mapKey));
79-
}
80-
81-
public RenderedParameterInfo calculateParameterInfo() {
82-
String mapKey = nextMapKey();
83-
return new RenderedParameterInfo(mapKey, renderedPlaceHolder(mapKey));
80+
renderingStrategy.getFormattedJdbcPlaceholderForPagingParameters(calculatedParameterName, mapKey));
8481
}
8582

8683
public <T> RenderedParameterInfo calculateParameterInfo(BindableColumn<T> column) {

src/main/java/org/mybatis/dynamic/sql/render/RenderingStrategy.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public abstract class RenderingStrategy {
3737
public static final String DEFAULT_PARAMETER_PREFIX = "parameters"; //$NON-NLS-1$
3838

3939
/**
40-
* Return a unique key that can be used to place a parameter value in the parameter map
40+
* Generate a unique key that can be used to place a parameter value in the parameter map
4141
*
4242
* @param sequence a sequence for calculating a unique value
4343
* @return a key used to place the parameter value in the parameter map
@@ -47,7 +47,20 @@ public String formatParameterMapKey(AtomicInteger sequence) {
4747
}
4848

4949
/**
50-
* Return a parameter map key intended as a parameter for a limit or fetch first query.
50+
* Return a parameter map key intended as a parameter for a fetch first query.
51+
*
52+
* <p>By default, this parameter is treated the same as any other. This method is a hook to support
53+
* MyBatis Spring Batch.
54+
*
55+
* @param sequence a sequence for calculating a unique value
56+
* @return a key used to place the parameter value in the parameter map
57+
*/
58+
public String formatParameterMapKeyForFetchFirstRows(AtomicInteger sequence) {
59+
return formatParameterMapKeyForLimit(sequence);
60+
}
61+
62+
/**
63+
* Return a parameter map key intended as a parameter for a limit query.
5164
*
5265
* <p>By default, this parameter is treated the same as any other. This method is a hook to support
5366
* MyBatis Spring Batch.
@@ -123,7 +136,7 @@ public String formatParameterMapKeyForOffset(AtomicInteger sequence) {
123136
* {@link RenderingStrategy#formatParameterMapKey(AtomicInteger)}
124137
* @return the generated binding
125138
*/
126-
public String getFormattedJdbcPlaceholderForLimitOrOffset(String prefix, String parameterName) {
139+
public String getFormattedJdbcPlaceholderForPagingParameters(String prefix, String parameterName) {
127140
return getFormattedJdbcPlaceholder(prefix, parameterName);
128141
}
129142

src/main/java/org/mybatis/dynamic/sql/select/render/FetchFirstPagingModelRenderer.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,11 @@ private FragmentAndParameters renderFetchFirstRowsOnly() {
5151
}
5252

5353
private FragmentAndParameters renderFetchFirstRowsOnly(Long fetchFirstRows) {
54-
RenderedParameterInfo limitParameterInfo = renderingContext.calculateLimitParameterInfo();
54+
RenderedParameterInfo fetchFirstParameterInfo = renderingContext.calculateFetchFirstRowsParameterInfo();
5555
return FragmentAndParameters
56-
.withFragment("fetch first " + limitParameterInfo.renderedPlaceHolder() //$NON-NLS-1$
56+
.withFragment("fetch first " + fetchFirstParameterInfo.renderedPlaceHolder() //$NON-NLS-1$
5757
+ " rows only") //$NON-NLS-1$
58-
.withParameter(limitParameterInfo.parameterMapKey(), fetchFirstRows)
58+
.withParameter(fetchFirstParameterInfo.parameterMapKey(), fetchFirstRows)
5959
.build();
6060
}
6161

@@ -69,12 +69,12 @@ private FragmentAndParameters renderOffsetOnly(Long offset) {
6969

7070
private FragmentAndParameters renderOffsetAndFetchFirstRows(Long offset, Long fetchFirstRows) {
7171
RenderedParameterInfo offsetParameterInfo = renderingContext.calculateOffsetParameterInfo();
72-
RenderedParameterInfo limitParameterInfo = renderingContext.calculateParameterInfo();
72+
RenderedParameterInfo fetchFirstParameterInfo = renderingContext.calculateFetchFirstRowsParameterInfo();
7373
return FragmentAndParameters.withFragment("offset " + offsetParameterInfo.renderedPlaceHolder() //$NON-NLS-1$
74-
+ " rows fetch first " + limitParameterInfo.renderedPlaceHolder() //$NON-NLS-1$
74+
+ " rows fetch first " + fetchFirstParameterInfo.renderedPlaceHolder() //$NON-NLS-1$
7575
+ " rows only") //$NON-NLS-1$
7676
.withParameter(offsetParameterInfo.parameterMapKey(), offset)
77-
.withParameter(limitParameterInfo.parameterMapKey(), fetchFirstRows)
77+
.withParameter(fetchFirstParameterInfo.parameterMapKey(), fetchFirstRows)
7878
.build();
7979
}
8080
}

src/main/java/org/mybatis/dynamic/sql/util/springbatch/SpringBatchPagingItemReaderRenderingStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
public class SpringBatchPagingItemReaderRenderingStrategy extends MyBatis3RenderingStrategy {
2828

2929
@Override
30-
public String getFormattedJdbcPlaceholderForLimitOrOffset(String prefix, String parameterName) {
30+
public String getFormattedJdbcPlaceholderForPagingParameters(String prefix, String parameterName) {
3131
return "#{" //$NON-NLS-1$
3232
+ parameterName
3333
+ "}"; //$NON-NLS-1$

src/site/markdown/docs/springBatch.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ to respond to these parameter values that are supplied at runtime. As with the o
8585
must also be taken to prepare the parameter values for use with this reader. See the following example:
8686

8787
```java
88-
@Bean
88+
@Bean
8989
public MyBatisPagingItemReader<PersonRecord> reader(SqlSessionFactory sqlSessionFactory) {
9090
SelectStatementProvider selectStatement = select(person.allColumns())
9191
.from(person)

src/test/java/examples/simple/MyBatisMapToRowTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import java.io.InputStreamReader;
2929
import java.sql.Connection;
3030
import java.sql.DriverManager;
31-
import java.util.ArrayList;
3231
import java.util.List;
3332
import java.util.Map;
3433
import java.util.stream.IntStream;
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
* Copyright 2016-2024 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package examples.springbatch;
17+
18+
import static examples.springbatch.mapper.PersonDynamicSqlSupport.*;
19+
import static org.assertj.core.api.Assertions.assertThat;
20+
import static org.mybatis.dynamic.sql.SqlBuilder.isLike;
21+
import static org.mybatis.dynamic.sql.SqlBuilder.select;
22+
23+
import org.junit.jupiter.api.Test;
24+
import org.mybatis.dynamic.sql.util.springbatch.SpringBatchUtility;
25+
26+
class SpringBatchRenderingTest {
27+
28+
@Test
29+
void renderLimit() {
30+
var selectStatement = select(person.allColumns())
31+
.from(person)
32+
.where(firstName, isLike("%f%"))
33+
.limit(SpringBatchUtility.MYBATIS_SPRING_BATCH_PAGESIZE)
34+
.offset(SpringBatchUtility.MYBATIS_SPRING_BATCH_SKIPROWS)
35+
.build()
36+
.render(SpringBatchUtility.SPRING_BATCH_PAGING_ITEM_READER_RENDERING_STRATEGY);
37+
38+
assertThat(selectStatement.getSelectStatement())
39+
.isEqualTo("""
40+
select * \
41+
from person \
42+
where first_name like #{parameters.p1,jdbcType=VARCHAR} \
43+
limit #{_pagesize} \
44+
offset #{_skiprows}""");
45+
}
46+
47+
@Test
48+
void renderFetchFirst() {
49+
var selectStatement = select(person.allColumns())
50+
.from(person)
51+
.where(firstName, isLike("%f%"))
52+
.offset(SpringBatchUtility.MYBATIS_SPRING_BATCH_SKIPROWS)
53+
.fetchFirst(SpringBatchUtility.MYBATIS_SPRING_BATCH_PAGESIZE).rowsOnly()
54+
.build()
55+
.render(SpringBatchUtility.SPRING_BATCH_PAGING_ITEM_READER_RENDERING_STRATEGY);
56+
57+
assertThat(selectStatement.getSelectStatement())
58+
.isEqualTo("""
59+
select * \
60+
from person \
61+
where first_name like #{parameters.p1,jdbcType=VARCHAR} \
62+
offset #{_skiprows} rows \
63+
fetch first #{_pagesize} rows only""");
64+
}
65+
}

0 commit comments

Comments
 (0)