Skip to content

Commit 8f1e7d6

Browse files
Merge branch 'main' of https://github.com/spring-projects/spring-data-relational into remote-unused-import
Signed-off-by: Tran Ngoc Nhan <[email protected]> # Conflicts: # spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/MyBatisJdbcConfigurationIntegrationTests.java
2 parents 38c8140 + 18a2f3c commit 8f1e7d6

File tree

41 files changed

+284
-139
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+284
-139
lines changed

pom.xml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,22 +35,22 @@
3535
<h2.version>2.4.240</h2.version>
3636
<hikari.version>5.1.0</hikari.version>
3737
<hsqldb.version>2.7.3</hsqldb.version>
38-
<mariadb-java-client.version>3.5.5</mariadb-java-client.version>
39-
<mssql.version>13.2.0.jre11</mssql.version>
40-
<mysql-connector-java.version>9.4.0</mysql-connector-java.version>
38+
<mariadb-java-client.version>3.5.6</mariadb-java-client.version>
39+
<mssql.version>13.2.1.jre11</mssql.version>
40+
<mysql-connector-java.version>9.5.0</mysql-connector-java.version>
4141
<postgresql.version>42.7.8</postgresql.version>
42-
<oracle.version>23.9.0.25.07</oracle.version>
42+
<oracle.version>23.26.0.0.0</oracle.version>
4343

4444
<!-- R2DBC driver dependencies-->
45-
<r2dbc-postgresql.version>1.1.0.RELEASE</r2dbc-postgresql.version>
46-
<r2dbc-h2.version>1.0.0.RELEASE</r2dbc-h2.version>
45+
<r2dbc-postgresql.version>1.1.1.RELEASE</r2dbc-postgresql.version>
46+
<r2dbc-h2.version>1.1.0.RELEASE</r2dbc-h2.version>
4747
<r2dbc-mariadb.version>1.3.0</r2dbc-mariadb.version>
4848
<r2dbc-mssql.version>1.0.3.RELEASE</r2dbc-mssql.version>
4949
<r2dbc-mysql.version>1.4.1</r2dbc-mysql.version>
5050
<oracle-r2dbc.version>1.3.0</oracle-r2dbc.version>
5151

5252
<!-- test dependencies -->
53-
<archunit.version>1.3.0</archunit.version>
53+
<archunit.version>1.4.1</archunit.version>
5454

5555
<mbr.version>0.4.0.BUILD-SNAPSHOT</mbr.version>
5656
</properties>

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/EntityRowMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
import java.sql.ResultSet;
1919
import java.sql.SQLException;
2020

21+
import org.springframework.data.core.TypeInformation;
2122
import org.springframework.data.relational.core.mapping.AggregatePath;
2223
import org.springframework.data.relational.core.mapping.RelationalPersistentEntity;
2324
import org.springframework.data.relational.domain.RowDocument;
24-
import org.springframework.data.util.TypeInformation;
2525
import org.springframework.jdbc.core.RowMapper;
2626

2727
/**

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcConverter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@
1818
import java.sql.SQLType;
1919

2020
import org.jspecify.annotations.Nullable;
21+
22+
import org.springframework.data.core.TypeInformation;
2123
import org.springframework.data.jdbc.core.mapping.JdbcValue;
2224
import org.springframework.data.relational.core.conversion.RelationalConverter;
2325
import org.springframework.data.relational.core.mapping.RelationalMappingContext;
2426
import org.springframework.data.relational.core.mapping.RelationalPersistentProperty;
2527
import org.springframework.data.relational.domain.RowDocument;
26-
import org.springframework.data.util.TypeInformation;
2728

2829
/**
2930
* A {@link JdbcConverter} is responsible for converting for values to the native relational representation and vice

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/MapEntityRowMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@
2020
import java.util.HashMap;
2121
import java.util.Map;
2222

23+
import org.springframework.data.core.TypeInformation;
2324
import org.springframework.data.relational.core.mapping.AggregatePath;
2425
import org.springframework.data.relational.core.sql.SqlIdentifier;
2526
import org.springframework.data.relational.domain.RowDocument;
26-
import org.springframework.data.util.TypeInformation;
2727
import org.springframework.jdbc.core.RowMapper;
2828
import org.springframework.util.Assert;
2929

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/MappingJdbcConverter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,12 @@
2626
import java.util.function.Function;
2727

2828
import org.jspecify.annotations.Nullable;
29+
2930
import org.springframework.context.ApplicationContextAware;
3031
import org.springframework.core.convert.converter.Converter;
3132
import org.springframework.dao.DataAccessException;
3233
import org.springframework.data.convert.CustomConversions;
34+
import org.springframework.data.core.TypeInformation;
3335
import org.springframework.data.jdbc.core.mapping.AggregateReference;
3436
import org.springframework.data.jdbc.core.mapping.JdbcValue;
3537
import org.springframework.data.jdbc.support.JdbcUtil;
@@ -45,7 +47,6 @@
4547
import org.springframework.data.relational.core.mapping.RelationalPersistentEntity;
4648
import org.springframework.data.relational.core.mapping.RelationalPersistentProperty;
4749
import org.springframework.data.relational.domain.RowDocument;
48-
import org.springframework.data.util.TypeInformation;
4950
import org.springframework.jdbc.UncategorizedSQLException;
5051
import org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator;
5152
import org.springframework.jdbc.support.SQLExceptionSubclassTranslator;

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/QueryMapper.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@
2424
import java.util.Map;
2525

2626
import org.jspecify.annotations.Nullable;
27+
28+
import org.springframework.data.core.PropertyPath;
29+
import org.springframework.data.core.PropertyReferenceException;
30+
import org.springframework.data.core.TypeInformation;
2731
import org.springframework.data.domain.Sort;
2832
import org.springframework.data.jdbc.core.mapping.JdbcValue;
2933
import org.springframework.data.jdbc.support.JdbcUtil;
3034
import org.springframework.data.mapping.PersistentPropertyAccessor;
3135
import org.springframework.data.mapping.PersistentPropertyPath;
32-
import org.springframework.data.mapping.PropertyPath;
33-
import org.springframework.data.mapping.PropertyReferenceException;
3436
import org.springframework.data.mapping.context.InvalidPersistentPropertyPath;
3537
import org.springframework.data.mapping.context.MappingContext;
3638
import org.springframework.data.relational.core.mapping.RelationalPersistentEntity;
@@ -41,7 +43,6 @@
4143
import org.springframework.data.relational.core.sql.*;
4244
import org.springframework.data.relational.domain.SqlSort;
4345
import org.springframework.data.util.Pair;
44-
import org.springframework.data.util.TypeInformation;
4546
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
4647
import org.springframework.util.Assert;
4748
import org.springframework.util.ClassUtils;

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/mapping/JdbcMappingContext.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@
1515
*/
1616
package org.springframework.data.jdbc.core.mapping;
1717

18+
import org.springframework.data.core.TypeInformation;
1819
import org.springframework.data.mapping.context.MappingContext;
1920
import org.springframework.data.mapping.model.Property;
2021
import org.springframework.data.mapping.model.SimpleTypeHolder;
2122
import org.springframework.data.relational.core.mapping.NamingStrategy;
2223
import org.springframework.data.relational.core.mapping.RelationalMappingContext;
2324
import org.springframework.data.relational.core.mapping.RelationalPersistentEntity;
2425
import org.springframework.data.relational.core.mapping.RelationalPersistentProperty;
25-
import org.springframework.data.util.TypeInformation;
2626

2727
/**
2828
* {@link MappingContext} implementation for JDBC.

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/mybatis/MyBatisDataAccessStrategy.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@
2929
import org.apache.ibatis.session.SqlSession;
3030
import org.jspecify.annotations.Nullable;
3131
import org.mybatis.spring.SqlSessionTemplate;
32+
3233
import org.springframework.dao.EmptyResultDataAccessException;
34+
import org.springframework.data.core.PropertyPath;
3335
import org.springframework.data.domain.Pageable;
3436
import org.springframework.data.domain.Sort;
3537
import org.springframework.data.jdbc.core.convert.CascadingDataAccessStrategy;
@@ -43,7 +45,6 @@
4345
import org.springframework.data.jdbc.core.convert.QueryMappingConfiguration;
4446
import org.springframework.data.jdbc.core.dialect.DialectResolver;
4547
import org.springframework.data.mapping.PersistentPropertyPath;
46-
import org.springframework.data.mapping.PropertyPath;
4748
import org.springframework.data.relational.core.conversion.IdValueSource;
4849
import org.springframework.data.relational.core.dialect.Dialect;
4950
import org.springframework.data.relational.core.mapping.RelationalMappingContext;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.springframework.beans.factory.config.RuntimeBeanReference;
2323
import org.springframework.core.annotation.MergedAnnotation;
2424
import org.springframework.core.annotation.MergedAnnotations;
25+
import org.springframework.data.core.TypeInformation;
2526
import org.springframework.data.jdbc.core.JdbcAggregateOperations;
2627
import org.springframework.data.jdbc.core.convert.QueryMappingConfiguration;
2728
import org.springframework.data.jdbc.core.dialect.JdbcDialect;
@@ -42,7 +43,6 @@
4243
import org.springframework.data.repository.query.QueryMethod;
4344
import org.springframework.data.repository.query.ReturnedType;
4445
import org.springframework.data.repository.query.ValueExpressionDelegate;
45-
import org.springframework.data.util.TypeInformation;
4646
import org.springframework.javapoet.CodeBlock;
4747
import org.springframework.javapoet.TypeName;
4848
import org.springframework.util.ClassUtils;

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/AbstractJdbcConfiguration.java

Lines changed: 12 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -15,51 +15,37 @@
1515
*/
1616
package org.springframework.data.jdbc.repository.config;
1717

18-
import java.util.ArrayList;
1918
import java.util.Collection;
2019
import java.util.Collections;
2120
import java.util.HashSet;
2221
import java.util.List;
2322
import java.util.Optional;
2423
import java.util.Set;
2524

26-
import org.apache.commons.logging.Log;
27-
import org.apache.commons.logging.LogFactory;
2825
import org.springframework.beans.BeansException;
2926
import org.springframework.context.ApplicationContext;
3027
import org.springframework.context.ApplicationContextAware;
3128
import org.springframework.context.annotation.Bean;
3229
import org.springframework.context.annotation.Configuration;
3330
import org.springframework.context.annotation.Lazy;
3431
import org.springframework.core.convert.converter.Converter;
35-
import org.springframework.data.convert.CustomConversions;
3632
import org.springframework.data.jdbc.core.JdbcAggregateOperations;
3733
import org.springframework.data.jdbc.core.JdbcAggregateTemplate;
3834
import org.springframework.data.jdbc.core.convert.DataAccessStrategy;
39-
import org.springframework.data.jdbc.core.convert.DataAccessStrategyFactory;
40-
import org.springframework.data.jdbc.core.convert.DefaultJdbcTypeFactory;
4135
import org.springframework.data.jdbc.core.convert.IdGeneratingEntityCallback;
4236
import org.springframework.data.jdbc.core.convert.JdbcConverter;
4337
import org.springframework.data.jdbc.core.convert.JdbcCustomConversions;
44-
import org.springframework.data.jdbc.core.convert.MappingJdbcConverter;
4538
import org.springframework.data.jdbc.core.convert.QueryMappingConfiguration;
4639
import org.springframework.data.jdbc.core.convert.RelationResolver;
4740
import org.springframework.data.jdbc.core.dialect.DialectResolver;
48-
import org.springframework.data.jdbc.core.dialect.JdbcArrayColumns;
4941
import org.springframework.data.jdbc.core.dialect.JdbcDialect;
5042
import org.springframework.data.jdbc.core.mapping.JdbcMappingContext;
51-
import org.springframework.data.jdbc.core.mapping.JdbcSimpleTypes;
52-
import org.springframework.data.mapping.model.SimpleTypeHolder;
5343
import org.springframework.data.relational.RelationalManagedTypes;
5444
import org.springframework.data.relational.core.conversion.RelationalConverter;
5545
import org.springframework.data.relational.core.dialect.Dialect;
56-
import org.springframework.data.relational.core.mapping.DefaultNamingStrategy;
5746
import org.springframework.data.relational.core.mapping.NamingStrategy;
5847
import org.springframework.data.relational.core.mapping.Table;
59-
import org.springframework.data.util.TypeScanner;
60-
import org.springframework.jdbc.core.JdbcTemplate;
6148
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations;
62-
import org.springframework.util.StringUtils;
6349

6450
/**
6551
* Beans that must be registered for Spring Data JDBC to work.
@@ -77,8 +63,6 @@
7763
@Configuration(proxyBeanMethods = false)
7864
public class AbstractJdbcConfiguration implements ApplicationContextAware {
7965

80-
private static final Log LOG = LogFactory.getLog(AbstractJdbcConfiguration.class);
81-
8266
@SuppressWarnings("NullAway.Init") private ApplicationContext applicationContext;
8367

8468
private QueryMappingConfiguration queryMappingConfiguration = QueryMappingConfiguration.EMPTY;
@@ -96,7 +80,7 @@ public class AbstractJdbcConfiguration implements ApplicationContextAware {
9680
protected Collection<String> getMappingBasePackages() {
9781

9882
Package mappingBasePackage = getClass().getPackage();
99-
return Collections.singleton(mappingBasePackage == null ? null : mappingBasePackage.getName());
83+
return mappingBasePackage == null ? List.of() : List.of(mappingBasePackage.getName());
10084
}
10185

10286
/**
@@ -124,13 +108,7 @@ public RelationalManagedTypes jdbcManagedTypes() throws ClassNotFoundException {
124108
@Bean
125109
public JdbcMappingContext jdbcMappingContext(Optional<NamingStrategy> namingStrategy,
126110
JdbcCustomConversions customConversions, RelationalManagedTypes jdbcManagedTypes) {
127-
128-
JdbcMappingContext mappingContext = JdbcMappingContext
129-
.forQuotedIdentifiers(namingStrategy.orElse(DefaultNamingStrategy.INSTANCE));
130-
mappingContext.setSimpleTypeHolder(customConversions.getSimpleTypeHolder());
131-
mappingContext.setManagedTypes(jdbcManagedTypes);
132-
133-
return mappingContext;
111+
return JdbcConfiguration.createMappingContext(jdbcManagedTypes, customConversions, namingStrategy.orElse(null));
134112
}
135113

136114
/**
@@ -143,7 +121,7 @@ public JdbcMappingContext jdbcMappingContext(Optional<NamingStrategy> namingStra
143121
*/
144122
@Bean
145123
public IdGeneratingEntityCallback idGeneratingBeforeSaveCallback(JdbcMappingContext mappingContext,
146-
NamedParameterJdbcOperations operations, Dialect dialect) {
124+
NamedParameterJdbcOperations operations, JdbcDialect dialect) {
147125
return new IdGeneratingEntityCallback(mappingContext, dialect, operations);
148126
}
149127

@@ -157,57 +135,29 @@ public IdGeneratingEntityCallback idGeneratingBeforeSaveCallback(JdbcMappingCont
157135
*/
158136
@Bean
159137
public JdbcConverter jdbcConverter(JdbcMappingContext mappingContext, NamedParameterJdbcOperations operations,
160-
@Lazy RelationResolver relationResolver, JdbcCustomConversions conversions, Dialect dialect) {
161-
162-
JdbcArrayColumns arrayColumns = JdbcDialect.getArraySupport(dialect);
163-
DefaultJdbcTypeFactory jdbcTypeFactory = new DefaultJdbcTypeFactory(operations.getJdbcOperations(), arrayColumns);
164-
165-
MappingJdbcConverter mappingJdbcConverter = new MappingJdbcConverter(mappingContext, relationResolver, conversions,
166-
jdbcTypeFactory);
167-
168-
if (operations.getJdbcOperations() instanceof JdbcTemplate jdbcTemplate) {
169-
mappingJdbcConverter.setExceptionTranslator(jdbcTemplate.getExceptionTranslator());
170-
}
171-
172-
return mappingJdbcConverter;
138+
@Lazy RelationResolver relationResolver, JdbcCustomConversions conversions, JdbcDialect dialect) {
139+
return JdbcConfiguration.createConverter(mappingContext, operations, relationResolver, conversions, dialect);
173140
}
174141

175142
/**
176143
* Register custom {@link Converter}s in a {@link JdbcCustomConversions} object if required. These
177144
* {@link JdbcCustomConversions} will be registered with the
178-
* {@link #jdbcConverter(JdbcMappingContext, NamedParameterJdbcOperations, RelationResolver, JdbcCustomConversions, Dialect)}.
145+
* {@link #jdbcConverter(JdbcMappingContext, NamedParameterJdbcOperations, RelationResolver, JdbcCustomConversions, JdbcDialect)}.
179146
* Returns an empty {@link JdbcCustomConversions} instance by default.
180147
*
181148
* @return will never be {@literal null}.
182149
*/
183150
@Bean
184151
public JdbcCustomConversions jdbcCustomConversions() {
185152

186-
Dialect dialect = applicationContext.getBeanProvider(Dialect.class).getIfAvailable();
187-
188-
if (dialect == null) {
189-
LOG.warn("No JdbcDialect bean found; CustomConversions will be configured without dialect-specific types.");
190-
return new JdbcCustomConversions();
191-
}
192-
193-
SimpleTypeHolder simpleTypeHolder = new SimpleTypeHolder(dialect.simpleTypes(), JdbcSimpleTypes.HOLDER);
194-
195-
return new JdbcCustomConversions(CustomConversions.StoreConversions.of(simpleTypeHolder, storeConverters(dialect)),
196-
userConverters());
153+
JdbcDialect dialect = applicationContext.getBean(JdbcDialect.class);
154+
return JdbcConfiguration.createCustomConversions(dialect, userConverters());
197155
}
198156

199157
protected List<?> userConverters() {
200158
return Collections.emptyList();
201159
}
202160

203-
private List<Object> storeConverters(Dialect dialect) {
204-
205-
List<Object> converters = new ArrayList<>();
206-
converters.addAll(dialect.getConverters());
207-
converters.addAll(JdbcCustomConversions.storeConverters());
208-
return converters;
209-
}
210-
211161
/**
212162
* Register a {@link JdbcAggregateTemplate} as a bean for easy use in applications that need a lower level of
213163
* abstraction than the normal repository abstraction.
@@ -232,8 +182,8 @@ public JdbcAggregateTemplate jdbcAggregateTemplate(ApplicationContext applicatio
232182
*/
233183
@Bean
234184
public DataAccessStrategy dataAccessStrategyBean(NamedParameterJdbcOperations operations, JdbcConverter jdbcConverter,
235-
JdbcMappingContext context, Dialect dialect) {
236-
return new DataAccessStrategyFactory(jdbcConverter, operations, dialect, this.queryMappingConfiguration).create();
185+
JdbcMappingContext context, JdbcDialect dialect) {
186+
return JdbcConfiguration.createDataAccessStrategy(operations, jdbcConverter, queryMappingConfiguration, dialect);
237187
}
238188

239189
/**
@@ -245,7 +195,7 @@ public DataAccessStrategy dataAccessStrategyBean(NamedParameterJdbcOperations op
245195
* @throws DialectResolver.NoDialectException if the {@link Dialect} cannot be determined.
246196
*/
247197
@Bean
248-
public Dialect jdbcDialect(NamedParameterJdbcOperations operations) {
198+
public JdbcDialect jdbcDialect(NamedParameterJdbcOperations operations) {
249199
return DialectResolver.getDialect(operations.getJdbcOperations());
250200
}
251201

@@ -286,16 +236,7 @@ protected Set<Class<?>> getInitialEntitySet() throws ClassNotFoundException {
286236
* @return a set of classes identified as entities.
287237
* @since 3.0
288238
*/
289-
@SuppressWarnings("unchecked")
290239
protected Set<Class<?>> scanForEntities(String basePackage) {
291-
292-
if (!StringUtils.hasText(basePackage)) {
293-
return Collections.emptySet();
294-
}
295-
296-
return TypeScanner.typeScanner(AbstractJdbcConfiguration.class.getClassLoader()) //
297-
.forTypesAnnotatedWith(Table.class) //
298-
.scanPackages(basePackage) //
299-
.collectAsSet();
240+
return JdbcConfiguration.scanForEntities(basePackage);
300241
}
301242
}

0 commit comments

Comments
 (0)