Skip to content

Commit e1f4903

Browse files
committed
Initial work on map to row functions
1 parent 2b9f814 commit e1f4903

17 files changed

+529
-23
lines changed

src/main/java/org/mybatis/dynamic/sql/insert/BatchInsertDSL.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.mybatis.dynamic.sql.util.ConstantMapping;
3030
import org.mybatis.dynamic.sql.util.NullMapping;
3131
import org.mybatis.dynamic.sql.util.PropertyMapping;
32+
import org.mybatis.dynamic.sql.util.RowMapping;
3233
import org.mybatis.dynamic.sql.util.StringConstantMapping;
3334

3435
public class BatchInsertDSL<T> implements Buildable<BatchInsertModel<T>> {
@@ -103,6 +104,11 @@ public BatchInsertDSL<T> toStringConstant(String constant) {
103104
columnMappings.add(StringConstantMapping.of(column, constant));
104105
return BatchInsertDSL.this;
105106
}
107+
108+
public BatchInsertDSL<T> toRow() {
109+
columnMappings.add(RowMapping.of(column));
110+
return BatchInsertDSL.this;
111+
}
106112
}
107113

108114
public abstract static class AbstractBuilder<T, B extends AbstractBuilder<T, B>> {

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,12 @@ public FieldAndValueAndParameters visit(PropertyMapping mapping) {
6666

6767
@Override
6868
public FieldAndValueAndParameters visit(RowMapping mapping) {
69-
// TODO - fix error number
70-
throw new UnsupportedOperationException(Messages.getInternalErrorString(99));
69+
return FieldAndValueAndParameters.withFieldName(mapping.columnName())
70+
.withValuePhrase(mapping.mapColumn(this::calculateJdbcPlaceholder))
71+
.build();
7172
}
7273

7374
abstract String calculateJdbcPlaceholder(SqlColumn<?> column, String parameterName);
75+
76+
abstract String calculateJdbcPlaceholder(SqlColumn<?> column);
7477
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,9 @@ String calculateJdbcPlaceholder(SqlColumn<?> column, String parameterName) {
2929
return column.renderingStrategy().orElse(renderingStrategy)
3030
.getFormattedJdbcPlaceholder(column, prefix, parameterName);
3131
}
32+
33+
@Override
34+
String calculateJdbcPlaceholder(SqlColumn<?> column) {
35+
return column.renderingStrategy().orElse(renderingStrategy).getFormattedJdbcPlaceholder(column, prefix);
36+
}
3237
}

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

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

1818
import org.mybatis.dynamic.sql.SqlColumn;
1919
import org.mybatis.dynamic.sql.render.RenderingStrategy;
20-
import org.mybatis.dynamic.sql.util.Messages;
21-
import org.mybatis.dynamic.sql.util.RowMapping;
22-
23-
import java.util.Optional;
2420

2521
public class MultiRowValuePhraseVisitor extends AbstractMultiRowValuePhraseVisitor {
2622

@@ -35,8 +31,7 @@ String calculateJdbcPlaceholder(SqlColumn<?> column, String parameterName) {
3531
}
3632

3733
@Override
38-
public FieldAndValueAndParameters visit(RowMapping mapping) {
39-
// TODO - fix error number, and move this somewhere up in the hierarchy
40-
throw new UnsupportedOperationException(Messages.getInternalErrorString(99));
34+
String calculateJdbcPlaceholder(SqlColumn<?> column) {
35+
return column.renderingStrategy().orElse(renderingStrategy).getMultiRowFormattedJdbcPlaceholder(column, prefix);
4136
}
4237
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,16 @@ public String getFormattedJdbcPlaceholder(BindableColumn<?> column, String prefi
3939
+ "}"; //$NON-NLS-1$
4040
}
4141

42+
@Override
43+
public String getFormattedJdbcPlaceholder(BindableColumn<?> column, String parameterName) {
44+
return "#{" //$NON-NLS-1$
45+
+ parameterName
46+
+ renderJdbcType(column)
47+
+ renderJavaType(column)
48+
+ renderTypeHandler(column)
49+
+ "}"; //$NON-NLS-1$
50+
}
51+
4252
private String renderTypeHandler(BindableColumn<?> column) {
4353
return column.typeHandler()
4454
.map(th -> ",typeHandler=" + th) //$NON-NLS-1$

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,15 @@ public static String formatParameterMapKey(AtomicInteger sequence) {
2828

2929
public abstract String getFormattedJdbcPlaceholder(BindableColumn<?> column, String prefix, String parameterName);
3030

31+
public abstract String getFormattedJdbcPlaceholder(BindableColumn<?> column, String parameterName);
32+
3133
public abstract String getFormattedJdbcPlaceholder(String prefix, String parameterName);
3234

3335
public String getMultiRowFormattedJdbcPlaceholder(BindableColumn<?> column, String prefix, String parameterName) {
3436
return getFormattedJdbcPlaceholder(column, prefix, parameterName);
3537
}
38+
39+
public String getMultiRowFormattedJdbcPlaceholder(BindableColumn<?> column, String parameterName) {
40+
return getFormattedJdbcPlaceholder(column, parameterName);
41+
}
3642
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ public String getFormattedJdbcPlaceholder(BindableColumn<?> column, String prefi
2424
return getFormattedJdbcPlaceholder(prefix, parameterName);
2525
}
2626

27+
@Override
28+
public String getFormattedJdbcPlaceholder(BindableColumn<?> column, String parameterName) {
29+
return ":" + parameterName; //$NON-NLS-1$
30+
}
31+
2732
@Override
2833
public String getFormattedJdbcPlaceholder(String prefix, String parameterName) {
2934
return ":" + parameterName; //$NON-NLS-1$
@@ -33,4 +38,9 @@ public String getFormattedJdbcPlaceholder(String prefix, String parameterName) {
3338
public String getMultiRowFormattedJdbcPlaceholder(BindableColumn<?> column, String prefix, String parameterName) {
3439
return ":" + prefix + "." + parameterName; //$NON-NLS-1$ //$NON-NLS-2$
3540
}
41+
42+
@Override
43+
public String getMultiRowFormattedJdbcPlaceholder(BindableColumn<?> column, String parameterName) {
44+
return ":" + parameterName; //$NON-NLS-1$
45+
}
3646
}

src/main/java/org/mybatis/dynamic/sql/util/spring/NamedParameterJdbcTemplateExtensions.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider;
3737
import org.mybatis.dynamic.sql.util.Buildable;
3838
import org.springframework.dao.EmptyResultDataAccessException;
39+
import org.springframework.jdbc.core.JdbcOperations;
3940
import org.springframework.jdbc.core.RowMapper;
4041
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
4142
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
@@ -160,4 +161,17 @@ public int update(Buildable<UpdateModel> updateStatement) {
160161
public int update(UpdateStatementProvider updateStatement) {
161162
return template.update(updateStatement.getUpdateStatement(), updateStatement.getParameters());
162163
}
164+
165+
/**
166+
* Allow access to the underlying template for unusual circumstances.
167+
*
168+
* @return The underlying Spring JdbcOperations implementation
169+
*/
170+
public JdbcOperations getJdbcOperations() {
171+
return template.getJdbcOperations();
172+
}
173+
174+
public NamedParameterJdbcTemplate getTemplate() {
175+
return template;
176+
}
163177
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package examples.simple;
2+
3+
import org.mybatis.dynamic.sql.SqlColumn;
4+
import org.mybatis.dynamic.sql.SqlTable;
5+
6+
import java.sql.JDBCType;
7+
8+
public class CompoundKeyDynamicSqlSupport {
9+
public static final CompoundKey compoundKey = new CompoundKey();
10+
public static final SqlColumn<Integer> id1 = compoundKey.id1;
11+
public static final SqlColumn<Integer> id2 = compoundKey.id2;
12+
13+
public static final class CompoundKey extends SqlTable {
14+
public final SqlColumn<Integer> id1 = column("id1", JDBCType.INTEGER);
15+
public final SqlColumn<Integer> id2 = column("id2", JDBCType.INTEGER);
16+
17+
public CompoundKey() {
18+
super("CompoundKey");
19+
}
20+
}
21+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package examples.simple;
2+
3+
import org.mybatis.dynamic.sql.util.mybatis3.CommonInsertMapper;
4+
import org.mybatis.dynamic.sql.util.mybatis3.CommonSelectMapper;
5+
6+
public interface CompoundKeyMapper extends CommonInsertMapper<Integer>, CommonSelectMapper {
7+
}

0 commit comments

Comments
 (0)