1515 */
1616package org .springframework .data .jdbc .repository .config ;
1717
18- import java .util .ArrayList ;
1918import java .util .Collection ;
2019import java .util .Collections ;
2120import java .util .HashSet ;
2221import java .util .List ;
2322import java .util .Optional ;
2423import java .util .Set ;
2524
26- import org .apache .commons .logging .Log ;
27- import org .apache .commons .logging .LogFactory ;
2825import org .springframework .beans .BeansException ;
2926import org .springframework .context .ApplicationContext ;
3027import org .springframework .context .ApplicationContextAware ;
3128import org .springframework .context .annotation .Bean ;
3229import org .springframework .context .annotation .Configuration ;
3330import org .springframework .context .annotation .Lazy ;
3431import org .springframework .core .convert .converter .Converter ;
35- import org .springframework .data .convert .CustomConversions ;
3632import org .springframework .data .jdbc .core .JdbcAggregateOperations ;
3733import org .springframework .data .jdbc .core .JdbcAggregateTemplate ;
3834import 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 ;
4135import org .springframework .data .jdbc .core .convert .IdGeneratingEntityCallback ;
4236import org .springframework .data .jdbc .core .convert .JdbcConverter ;
4337import org .springframework .data .jdbc .core .convert .JdbcCustomConversions ;
44- import org .springframework .data .jdbc .core .convert .MappingJdbcConverter ;
4538import org .springframework .data .jdbc .core .convert .QueryMappingConfiguration ;
4639import org .springframework .data .jdbc .core .convert .RelationResolver ;
4740import org .springframework .data .jdbc .core .dialect .DialectResolver ;
48- import org .springframework .data .jdbc .core .dialect .JdbcArrayColumns ;
4941import org .springframework .data .jdbc .core .dialect .JdbcDialect ;
5042import org .springframework .data .jdbc .core .mapping .JdbcMappingContext ;
51- import org .springframework .data .jdbc .core .mapping .JdbcSimpleTypes ;
52- import org .springframework .data .mapping .model .SimpleTypeHolder ;
5343import org .springframework .data .relational .RelationalManagedTypes ;
5444import org .springframework .data .relational .core .conversion .RelationalConverter ;
5545import org .springframework .data .relational .core .dialect .Dialect ;
56- import org .springframework .data .relational .core .mapping .DefaultNamingStrategy ;
5746import org .springframework .data .relational .core .mapping .NamingStrategy ;
5847import org .springframework .data .relational .core .mapping .Table ;
59- import org .springframework .data .util .TypeScanner ;
60- import org .springframework .jdbc .core .JdbcTemplate ;
6148import 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.
7763@ Configuration (proxyBeanMethods = false )
7864public 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