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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy