Skip to content

Commit dda1245

Browse files
committed
Polishing
1 parent 1cc137f commit dda1245

File tree

6 files changed

+61
-40
lines changed

6 files changed

+61
-40
lines changed

src/main/java/org/mybatis/dynamic/sql/insert/render/BatchInsertRenderer.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,17 @@ public BatchInsert<T> render() {
4848
private String calculateInsertStatement(List<FieldAndValue> fieldsAndValues) {
4949
return "insert into" //$NON-NLS-1$
5050
+ spaceBefore(model.table().tableNameAtRuntime())
51-
+ spaceBefore(MultiRowRenderingUtilities.calculateColumnsPhrase(fieldsAndValues))
52-
+ spaceBefore(calculateVluesPhrase(fieldsAndValues));
51+
+ spaceBefore(calculateColumnsPhrase(fieldsAndValues))
52+
+ spaceBefore(calculateValuesPhrase(fieldsAndValues));
5353
}
5454

55-
private String calculateVluesPhrase(List<FieldAndValue> fieldsAndValues) {
55+
private String calculateColumnsPhrase(List<FieldAndValue> fieldsAndValues) {
56+
return fieldsAndValues.stream()
57+
.map(FieldAndValue::fieldName)
58+
.collect(Collectors.joining(", ", "(", ")")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
59+
}
60+
61+
private String calculateValuesPhrase(List<FieldAndValue> fieldsAndValues) {
5662
return fieldsAndValues.stream()
5763
.map(FieldAndValue::valuePhrase)
5864
.collect(Collectors.joining(", ", "values (", ")")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

src/main/java/org/mybatis/dynamic/sql/insert/render/FieldAndValue.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,6 @@ public String valuePhrase() {
3535
return valuePhrase;
3636
}
3737

38-
public String valuePhrase(int row) {
39-
return String.format(valuePhrase, row);
40-
}
41-
4238
public static Builder withFieldName(String fieldName) {
4339
return new Builder().withFieldName(fieldName);
4440
}

src/main/java/org/mybatis/dynamic/sql/insert/render/MultiRowInsertRenderer.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ private MultiRowInsertRenderer(Builder<T> builder) {
3636
}
3737

3838
public MultiRowInsertStatementProvider<T> render() {
39+
// the prefix is a generic format that will be resolved below with String.format(...)
3940
MultiRowValuePhraseVisitor visitor =
4041
new MultiRowValuePhraseVisitor(renderingStrategy, "records[%s]"); //$NON-NLS-1$
4142
List<FieldAndValue> fieldsAndValues = model
@@ -50,10 +51,16 @@ public MultiRowInsertStatementProvider<T> render() {
5051
private String calculateInsertStatement(List<FieldAndValue> fieldsAndValues) {
5152
return "insert into" //$NON-NLS-1$
5253
+ spaceBefore(model.table().tableNameAtRuntime())
53-
+ spaceBefore(MultiRowRenderingUtilities.calculateColumnsPhrase(fieldsAndValues))
54+
+ spaceBefore(calculateColumnsPhrase(fieldsAndValues))
5455
+ spaceBefore(calculateMultiRowInsertValuesPhrase(fieldsAndValues, model.recordCount()));
5556
}
5657

58+
private String calculateColumnsPhrase(List<FieldAndValue> fieldsAndValues) {
59+
return fieldsAndValues.stream()
60+
.map(FieldAndValue::fieldName)
61+
.collect(Collectors.joining(", ", "(", ")")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
62+
}
63+
5764
private String calculateMultiRowInsertValuesPhrase(List<FieldAndValue> fieldsAndValues, int rowCount) {
5865
return IntStream.range(0, rowCount)
5966
.mapToObj(i -> toSingleRowOfValues(fieldsAndValues, i))
@@ -62,7 +69,8 @@ private String calculateMultiRowInsertValuesPhrase(List<FieldAndValue> fieldsAnd
6269

6370
private String toSingleRowOfValues(List<FieldAndValue> fieldsAndValues, int row) {
6471
return fieldsAndValues.stream()
65-
.map(fmv -> fmv.valuePhrase(row))
72+
.map(FieldAndValue::valuePhrase)
73+
.map(s -> String.format(s, row))
6674
.collect(Collectors.joining(", ", "(", ")")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
6775
}
6876

src/main/java/org/mybatis/dynamic/sql/insert/render/MultiRowRenderingUtilities.java

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

src/test/java/examples/generated/always/mybatis/PersonMapperTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,6 @@ void testInsertSelectWithMultipleRecords() {
150150

151151
rows = mapper.insertSelect(insertSelectStatement, keys);
152152
assertThat(rows).isEqualTo(2);
153-
System.out.println(keys);
154153
assertThat(keys.get(0).getKey()).isEqualTo(24);
155154
assertThat(keys.get(1).getKey()).isEqualTo(25);
156155

src/test/java/examples/spring/PersonTemplateTest.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.junit.jupiter.api.BeforeEach;
2929
import org.junit.jupiter.api.Test;
3030
import org.mybatis.dynamic.sql.delete.DeleteModel;
31+
import org.mybatis.dynamic.sql.insert.BatchInsertModel;
3132
import org.mybatis.dynamic.sql.insert.GeneralInsertModel;
3233
import org.mybatis.dynamic.sql.insert.InsertModel;
3334
import org.mybatis.dynamic.sql.insert.MultiRowInsertModel;
@@ -281,6 +282,47 @@ record = new PersonRecord();
281282
assertThat(rows).isEqualTo(2);
282283
}
283284

285+
@Test
286+
void testInsertBatch() {
287+
288+
List<PersonRecord> records = new ArrayList<>();
289+
290+
PersonRecord record = new PersonRecord();
291+
record.setId(100);
292+
record.setFirstName("Joe");
293+
record.setLastName(LastName.of("Jones"));
294+
record.setBirthDate(new Date());
295+
record.setEmployed(true);
296+
record.setOccupation("Developer");
297+
record.setAddressId(1);
298+
records.add(record);
299+
300+
record = new PersonRecord();
301+
record.setId(101);
302+
record.setFirstName("Sarah");
303+
record.setLastName(LastName.of("Smith"));
304+
record.setBirthDate(new Date());
305+
record.setEmployed(true);
306+
record.setOccupation("Architect");
307+
record.setAddressId(2);
308+
records.add(record);
309+
310+
Buildable<BatchInsertModel<PersonRecord>> insertStatement = insert(records).into(person)
311+
.map(id).toProperty("id")
312+
.map(firstName).toProperty("firstName")
313+
.map(lastName).toProperty("lastNameAsString")
314+
.map(birthDate).toProperty("birthDate")
315+
.map(employed).toProperty("employedAsString")
316+
.map(occupation).toProperty("occupation")
317+
.map(addressId).toProperty("addressId");
318+
319+
int[] rows = template.insertBatch(insertStatement);
320+
321+
assertThat(rows).hasSize(2);
322+
assertThat(rows[0]).isEqualTo(1);
323+
assertThat(rows[1]).isEqualTo(1);
324+
}
325+
284326
@Test
285327
void testInsertSelective() {
286328
PersonRecord record = new PersonRecord();

0 commit comments

Comments
 (0)