Skip to content

Commit 2363375

Browse files
committed
Polishing.
1 parent 847e2e0 commit 2363375

File tree

7 files changed

+41
-29
lines changed

7 files changed

+41
-29
lines changed

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/aot/AotRepositoryFragmentSupport.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ protected AotRepositoryFragmentSupport(RowMapperFactory rowMapperFactory, JdbcAg
114114
it -> valueExpressions.createValueContextProvider(parameters.get().get(it))));
115115
}
116116

117+
protected RowMapperFactory getRowMapperFactory() {
118+
return rowMapperFactory;
119+
}
120+
117121
protected StatementFactory getStatementFactory() {
118122
return statementFactory;
119123
}

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/aot/JdbcCodeBlocks.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
import org.springframework.data.jdbc.repository.query.Modifying;
3939
import org.springframework.data.jdbc.repository.query.ParameterBinding;
4040
import org.springframework.data.jdbc.repository.query.Query;
41-
import org.springframework.data.jdbc.repository.query.RowMapperFactory;
4241
import org.springframework.data.jdbc.repository.query.StatementFactory;
4342
import org.springframework.data.relational.core.query.Criteria;
4443
import org.springframework.data.relational.core.query.CriteriaDefinition;
@@ -579,8 +578,8 @@ public CodeBlock build() {
579578
builder.addStatement("$T $L = new $T()", RowMapper.class, rowMapper,
580579
rowMapperClass);
581580
} else if (StringUtils.hasText(rowMapperRef)) {
582-
builder.addStatement("$T $L = $L.getRowMapper($S)", RowMapper.class, rowMapper,
583-
context.fieldNameOf(RowMapperFactory.class), rowMapperRef);
581+
builder.addStatement("$T $L = getRowMapperFactory().getRowMapper($S)", RowMapper.class, rowMapper,
582+
rowMapperRef);
584583
} else if (resultSetExtractorClass == null) {
585584

586585
Type typeToRead;
@@ -591,8 +590,8 @@ public CodeBlock build() {
591590
typeToRead = context.getActualReturnType().getType();
592591
}
593592

594-
builder.addStatement("$T $L = $L.create($T.class)", RowMapper.class, rowMapper,
595-
context.fieldNameOf(RowMapperFactory.class), typeToRead);
593+
builder.addStatement("$T $L = getRowMapperFactory().create($T.class)", RowMapper.class, rowMapper,
594+
typeToRead);
596595
}
597596

598597
if (StringUtils.hasText(resultSetExtractorRef) || resultSetExtractorClass != null) {
@@ -606,8 +605,8 @@ public CodeBlock build() {
606605
builder.addStatement("$T $L = new $T()", ResultSetExtractor.class, resultSetExtractor,
607606
resultSetExtractorClass);
608607
} else if (StringUtils.hasText(resultSetExtractorRef)) {
609-
builder.addStatement("$T $L = $L.getResultSetExtractor($S)", ResultSetExtractor.class, resultSetExtractor,
610-
context.fieldNameOf(RowMapperFactory.class), resultSetExtractorRef);
608+
builder.addStatement("$T $L = getRowMapperFactory().getResultSetExtractor($S)", ResultSetExtractor.class,
609+
resultSetExtractor, resultSetExtractorRef);
611610
}
612611
}
613612

@@ -710,8 +709,8 @@ private CodeBlock update(Builder builder, Class<?> returnType) {
710709
private CodeBlock delete(Builder builder, String rowMapper, String result, TypeName queryResultType,
711710
Class<?> returnType, Type actualReturnType) {
712711

713-
builder.addStatement("$T $L = $L.create($T.class)", RowMapper.class, rowMapper,
714-
context.fieldNameOf(RowMapperFactory.class), context.getRepositoryInformation().getDomainType());
712+
builder.addStatement("$T $L = getRowMapperFactory().create($T.class)", RowMapper.class, rowMapper,
713+
context.getRepositoryInformation().getDomainType());
715714

716715
builder.addStatement("$T $L = ($T) getJdbcOperations().query($L, $L, new $T<>($L))", List.class, result,
717716
List.class, queryVariableName, parameterSourceVariableName, RowMapperResultSetExtractor.class, rowMapper);

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/aot/JdbcRepositoryContributor.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import org.jspecify.annotations.Nullable;
2121

22+
import org.springframework.beans.factory.BeanFactory;
2223
import org.springframework.core.annotation.MergedAnnotation;
2324
import org.springframework.core.annotation.MergedAnnotations;
2425
import org.springframework.data.jdbc.core.JdbcAggregateOperations;
@@ -27,7 +28,7 @@
2728
import org.springframework.data.jdbc.repository.query.JdbcQueryMethod;
2829
import org.springframework.data.jdbc.repository.query.Modifying;
2930
import org.springframework.data.jdbc.repository.query.Query;
30-
import org.springframework.data.jdbc.repository.query.RowMapperFactory;
31+
import org.springframework.data.jdbc.repository.support.BeanFactoryAwareRowMapperFactory;
3132
import org.springframework.data.relational.core.mapping.RelationalMappingContext;
3233
import org.springframework.data.relational.repository.Lock;
3334
import org.springframework.data.repository.aot.generate.AotRepositoryClassBuilder;
@@ -53,17 +54,15 @@
5354
public class JdbcRepositoryContributor extends RepositoryContributor {
5455

5556
private final RelationalMappingContext mappingContext;
56-
private final JdbcConverter converter;
5757
private final QueriesFactory queriesFactory;
5858

5959
public JdbcRepositoryContributor(AotRepositoryContext repositoryContext, JdbcDialect dialect,
6060
JdbcConverter converter) {
61+
6162
super(repositoryContext);
6263

63-
this.converter = converter;
6464
this.mappingContext = converter.getMappingContext();
65-
66-
this.queriesFactory = new QueriesFactory(repositoryContext.getConfigurationSource(), this.converter, dialect,
65+
this.queriesFactory = new QueriesFactory(repositoryContext.getConfigurationSource(), converter, dialect,
6766
repositoryContext.getRequiredClassLoader(), ValueExpressionDelegate.create());
6867
}
6968

@@ -75,12 +74,13 @@ protected void customizeClass(AotRepositoryClassBuilder classBuilder) {
7574
@Override
7675
protected void customizeConstructor(AotRepositoryConstructorBuilder constructorBuilder) {
7776

78-
constructorBuilder.addParameter("rowMapperFactory", TypeName.get(RowMapperFactory.class));
77+
constructorBuilder.addParameter("beanFactory", TypeName.get(BeanFactory.class), false);
7978
constructorBuilder.addParameter("operations", JdbcAggregateOperations.class);
80-
constructorBuilder.addParameter("context", RepositoryFactoryBeanSupport.FragmentCreationContext.class);
79+
constructorBuilder.addParameter("context", TypeName.get(RepositoryFactoryBeanSupport.FragmentCreationContext.class),
80+
false);
8181

8282
constructorBuilder.customize(builder -> {
83-
builder.addStatement("super(rowMapperFactory, operations, context)");
83+
builder.addStatement("super(new $T(beanFactory), operations, context)", BeanFactoryAwareRowMapperFactory.class);
8484
});
8585
}
8686

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/JdbcQueryCreator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,10 @@ StatementFactory.Selection getSelection(RelationalPersistentEntity<?> entity) {
232232
selection.project(returnedType.getInputProperties());
233233
}
234234

235+
if (tree.isLimiting()) {
236+
selection.limit(tree.getResultLimit());
237+
}
238+
235239
return selection;
236240
}
237241

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/BeanFactoryAwareRowMapperFactory.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package org.springframework.data.jdbc.repository.support;
1717

1818
import org.springframework.beans.factory.BeanFactory;
19-
import org.springframework.context.ApplicationContext;
2019
import org.springframework.context.ApplicationEventPublisher;
2120
import org.springframework.data.jdbc.core.convert.JdbcConverter;
2221
import org.springframework.data.jdbc.core.convert.QueryMappingConfiguration;
@@ -41,22 +40,21 @@ public class BeanFactoryAwareRowMapperFactory extends DefaultRowMapperFactory {
4140

4241
private final @Nullable BeanFactory beanFactory;
4342

44-
BeanFactoryAwareRowMapperFactory(JdbcConverter converter, QueryMappingConfiguration queryMappingConfiguration,
45-
EntityCallbacks entityCallbacks, ApplicationEventPublisher publisher, @Nullable BeanFactory beanFactory) {
43+
public BeanFactoryAwareRowMapperFactory(BeanFactory beanFactory) {
4644

47-
super(converter, queryMappingConfiguration, entityCallbacks, publisher);
45+
super(beanFactory.getBean(JdbcConverter.class), beanFactory
46+
.getBeanProvider(QueryMappingConfiguration.class).getIfAvailable(() -> QueryMappingConfiguration.EMPTY),
47+
EntityCallbacks.create(beanFactory), (ApplicationEventPublisher) beanFactory);
4848

4949
this.beanFactory = beanFactory;
5050
}
5151

52-
public BeanFactoryAwareRowMapperFactory(ApplicationContext applicationContext) {
52+
BeanFactoryAwareRowMapperFactory(JdbcConverter converter, QueryMappingConfiguration queryMappingConfiguration,
53+
EntityCallbacks entityCallbacks, ApplicationEventPublisher publisher, @Nullable BeanFactory beanFactory) {
5354

54-
super(
55-
applicationContext.getBean(JdbcConverter.class), applicationContext
56-
.getBeanProvider(QueryMappingConfiguration.class).getIfAvailable(() -> QueryMappingConfiguration.EMPTY),
57-
EntityCallbacks.create(applicationContext), applicationContext);
55+
super(converter, queryMappingConfiguration, entityCallbacks, publisher);
5856

59-
this.beanFactory = applicationContext;
57+
this.beanFactory = beanFactory;
6058
}
6159

6260
public BeanFactoryAwareRowMapperFactory(RelationalMappingContext context, JdbcConverter converter,

spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/aot/AotFragmentTestConfigurationSupport.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
3535
import org.springframework.beans.factory.support.DefaultBeanNameGenerator;
3636
import org.springframework.context.ApplicationContext;
37+
import org.springframework.context.ApplicationContextAware;
3738
import org.springframework.context.annotation.Bean;
3839
import org.springframework.core.env.Environment;
3940
import org.springframework.core.env.StandardEnvironment;
@@ -67,12 +68,13 @@
6768
*
6869
* @author Mark Paluch
6970
*/
70-
public class AotFragmentTestConfigurationSupport implements BeanFactoryPostProcessor {
71+
public class AotFragmentTestConfigurationSupport implements BeanFactoryPostProcessor, ApplicationContextAware {
7172

7273
private final Class<?> repositoryInterface;
7374
private final JdbcDialect dialect;
7475
private final boolean registerFragmentFacade;
7576
private final TestJdbcAotRepositoryContext<?> repositoryContext;
77+
private ApplicationContext applicationContext;
7678

7779
public AotFragmentTestConfigurationSupport(Class<?> repositoryInterface, JdbcDialect dialect, Class<?> configClass) {
7880
this(repositoryInterface, dialect, configClass, true);
@@ -110,7 +112,7 @@ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
110112

111113
AbstractBeanDefinition aotGeneratedRepository = BeanDefinitionBuilder
112114
.genericBeanDefinition(repositoryInterface.getName() + "Impl__AotRepository")
113-
.addConstructorArgValue(new RuntimeBeanReference(BeanFactoryAwareRowMapperFactory.class))
115+
.addConstructorArgValue(applicationContext)
114116
.addConstructorArgValue(new RuntimeBeanReference(JdbcAggregateOperations.class))
115117
.addConstructorArgValue(
116118
getCreationContext(repositoryContext, beanFactory.getBean(Environment.class), beanFactory))
@@ -183,4 +185,8 @@ public ProjectionFactory getProjectionFactory() {
183185
return creationContext;
184186
}
185187

188+
@Override
189+
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
190+
this.applicationContext = applicationContext;
191+
}
186192
}

src/main/antora/modules/ROOT/nav.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
** xref:jdbc/auditing.adoc[]
3333
** xref:jdbc/transactions.adoc[]
3434
** xref:jdbc/schema-support.adoc[]
35+
** xref:jdbc/aot.adoc[]
3536
3637
* xref:r2dbc.adoc[]
3738
** xref:r2dbc/getting-started.adoc[]

0 commit comments

Comments
 (0)