Skip to content

Commit 680e5fd

Browse files
authored
Merge pull request #261 from domaframework/add_some_component_definitions
Add some component definitions
2 parents 580bc9f + bba1656 commit 680e5fd

File tree

13 files changed

+584
-32
lines changed

13 files changed

+584
-32
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ target
99
.settings
1010
.factorypath
1111
.apt_generated
12+
.vscode/

doma-spring-boot-autoconfigure/src/main/java/org/seasar/doma/boot/autoconfigure/DomaAutoConfiguration.java

Lines changed: 69 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,29 @@
11
package org.seasar.doma.boot.autoconfigure;
22

3+
import java.util.Optional;
4+
import java.util.function.Predicate;
5+
36
import javax.sql.DataSource;
47

58
import org.apache.commons.logging.Log;
69
import org.apache.commons.logging.LogFactory;
710
import org.seasar.doma.boot.DomaPersistenceExceptionTranslator;
11+
import org.seasar.doma.boot.DomaSpringBootSqlBuilderSettings;
12+
import org.seasar.doma.boot.ResourceLoaderScriptFileLoader;
813
import org.seasar.doma.boot.TryLookupEntityListenerProvider;
914
import org.seasar.doma.boot.autoconfigure.DomaProperties.DialectType;
1015
import org.seasar.doma.boot.event.DomaEventEntityListener;
1116
import org.seasar.doma.boot.event.DomaEventListenerFactory;
1217
import org.seasar.doma.jdbc.Config;
18+
import org.seasar.doma.jdbc.ConfigSupport;
19+
import org.seasar.doma.jdbc.DuplicateColumnHandler;
1320
import org.seasar.doma.jdbc.EntityListenerProvider;
1421
import org.seasar.doma.jdbc.JdbcLogger;
1522
import org.seasar.doma.jdbc.Naming;
23+
import org.seasar.doma.jdbc.ScriptFileLoader;
24+
import org.seasar.doma.jdbc.SqlBuilderSettings;
1625
import org.seasar.doma.jdbc.SqlFileRepository;
26+
import org.seasar.doma.jdbc.ThrowingDuplicateColumnHandler;
1727
import org.seasar.doma.jdbc.criteria.Entityql;
1828
import org.seasar.doma.jdbc.criteria.NativeSql;
1929
import org.seasar.doma.jdbc.criteria.QueryDsl;
@@ -27,7 +37,11 @@
2737
import org.seasar.doma.jdbc.dialect.PostgresDialect;
2838
import org.seasar.doma.jdbc.dialect.SqliteDialect;
2939
import org.seasar.doma.jdbc.dialect.StandardDialect;
40+
import org.seasar.doma.jdbc.statistic.DefaultStatisticManager;
41+
import org.seasar.doma.jdbc.statistic.StatisticManager;
42+
import org.springframework.beans.factory.ObjectProvider;
3043
import org.springframework.beans.factory.annotation.Autowired;
44+
import org.springframework.beans.factory.annotation.Qualifier;
3145
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
3246
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
3347
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -38,6 +52,7 @@
3852
import org.springframework.context.annotation.Bean;
3953
import org.springframework.context.annotation.Configuration;
4054
import org.springframework.core.env.Environment;
55+
import org.springframework.core.io.ResourceLoader;
4156
import org.springframework.dao.support.PersistenceExceptionTranslator;
4257
import org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator;
4358

@@ -99,8 +114,7 @@ public Dialect dialect(Environment environment) {
99114
}
100115

101116
@Bean
102-
@ConditionalOnProperty(prefix = DomaProperties.DOMA_PREFIX, name = "exception-translation-enabled",
103-
matchIfMissing = true)
117+
@ConditionalOnProperty(prefix = DomaProperties.DOMA_PREFIX, name = "exception-translation-enabled", matchIfMissing = true)
104118
public PersistenceExceptionTranslator exceptionTranslator(Config config) {
105119
return new DomaPersistenceExceptionTranslator(
106120
new SQLErrorCodeSQLExceptionTranslator(config.getDataSource()));
@@ -141,6 +155,44 @@ public EntityListenerProvider tryLookupEntityListenerProvider() {
141155
return new TryLookupEntityListenerProvider();
142156
}
143157

158+
@Bean
159+
@ConditionalOnMissingBean
160+
public DuplicateColumnHandler duplicateColumnHandler() {
161+
if (domaProperties.isThrowExceptionIfDuplicateColumn()) {
162+
return new ThrowingDuplicateColumnHandler();
163+
}
164+
return ConfigSupport.defaultDuplicateColumnHandler;
165+
}
166+
167+
@Bean
168+
@ConditionalOnMissingBean
169+
public ScriptFileLoader scriptFileLoader(ResourceLoader resourceLoader) {
170+
return new ResourceLoaderScriptFileLoader(resourceLoader);
171+
}
172+
173+
@Bean
174+
@ConditionalOnMissingBean
175+
public SqlBuilderSettings sqlBuilderSettings(
176+
@Qualifier("shouldRemoveBlockComment") Optional<Predicate<String>> shouldRemoveBlockCommentOpt,
177+
@Qualifier("shouldRemoveLineComment") Optional<Predicate<String>> shouldRemoveLineCommentOpt) {
178+
Predicate<String> shouldRemoveBlockComment = shouldRemoveBlockCommentOpt
179+
.orElseGet(() -> comment -> false);
180+
Predicate<String> shouldRemoveLineComment = shouldRemoveLineCommentOpt
181+
.orElseGet(() -> comment -> false);
182+
boolean shouldRemoveBlankLines = domaProperties.getSqlBuilderSettings()
183+
.isShouldRemoveBlankLines();
184+
boolean shouldRequireInListPadding = domaProperties.getSqlBuilderSettings()
185+
.isShouldRequireInListPadding();
186+
return new DomaSpringBootSqlBuilderSettings(shouldRemoveBlockComment,
187+
shouldRemoveLineComment, shouldRemoveBlankLines, shouldRequireInListPadding);
188+
}
189+
190+
@Bean
191+
@ConditionalOnMissingBean
192+
public StatisticManager statisticManager() {
193+
return new DefaultStatisticManager(domaProperties.getStatisticManager().isEnabled());
194+
}
195+
144196
@Bean
145197
@ConditionalOnMissingBean
146198
public DomaConfigBuilder domaConfigBuilder() {
@@ -152,7 +204,9 @@ public DomaConfigBuilder domaConfigBuilder() {
152204
public DomaConfig config(DataSource dataSource, Dialect dialect,
153205
SqlFileRepository sqlFileRepository, Naming naming, JdbcLogger jdbcLogger,
154206
EntityListenerProvider entityListenerProvider,
155-
DomaConfigBuilder domaConfigBuilder) {
207+
DomaConfigBuilder domaConfigBuilder, DuplicateColumnHandler duplicateColumnHandler,
208+
ScriptFileLoader scriptFileLoader, SqlBuilderSettings sqlBuilderSettings,
209+
StatisticManager statisticManager) {
156210
if (domaConfigBuilder.dataSource() == null) {
157211
domaConfigBuilder.dataSource(dataSource);
158212
}
@@ -171,6 +225,18 @@ public DomaConfig config(DataSource dataSource, Dialect dialect,
171225
if (domaConfigBuilder.entityListenerProvider() == null) {
172226
domaConfigBuilder.entityListenerProvider(entityListenerProvider);
173227
}
228+
if (domaConfigBuilder.duplicateColumnHandler() == null) {
229+
domaConfigBuilder.duplicateColumnHandler(duplicateColumnHandler);
230+
}
231+
if (domaConfigBuilder.scriptFileLoader() == null) {
232+
domaConfigBuilder.scriptFileLoader(scriptFileLoader);
233+
}
234+
if (domaConfigBuilder.sqlBuilderSettings() == null) {
235+
domaConfigBuilder.sqlBuilderSettings(sqlBuilderSettings);
236+
}
237+
if (domaConfigBuilder.statisticManager() == null) {
238+
domaConfigBuilder.statisticManager(statisticManager);
239+
}
174240
return domaConfigBuilder.build();
175241
}
176242

doma-spring-boot-autoconfigure/src/main/java/org/seasar/doma/boot/autoconfigure/DomaConfig.java

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import org.seasar.doma.jdbc.*;
66
import org.seasar.doma.jdbc.dialect.Dialect;
7+
import org.seasar.doma.jdbc.statistic.StatisticManager;
78

89
/**
910
* {@link Config} implementation used in doma-spring-boot.
@@ -26,6 +27,10 @@ public class DomaConfig implements Config {
2627
private final Commenter commenter;
2728
private final EntityListenerProvider entityListenerProvider;
2829
private final DomaProperties domaProperties;
30+
private final DuplicateColumnHandler duplicateColumnHandler;
31+
private final ScriptFileLoader scriptFileLoader;
32+
private final SqlBuilderSettings sqlBuilderSettings;
33+
private final StatisticManager statisticManager;
2934

3035
public DomaConfig(DomaConfigBuilder builder, DomaProperties domaProperties) {
3136
this.dataSource = builder.dataSource();
@@ -41,6 +46,10 @@ public DomaConfig(DomaConfigBuilder builder, DomaProperties domaProperties) {
4146
this.mapKeyNaming = builder.mapKeyNaming();
4247
this.commenter = builder.commenter();
4348
this.entityListenerProvider = builder.entityListenerProvider();
49+
this.duplicateColumnHandler = builder.duplicateColumnHandler();
50+
this.scriptFileLoader = builder.scriptFileLoader();
51+
this.sqlBuilderSettings = builder.sqlBuilderSettings();
52+
this.statisticManager = builder.statisticManager();
4453
this.domaProperties = domaProperties;
4554
}
4655

@@ -140,15 +149,22 @@ public EntityListenerProvider getEntityListenerProvider() {
140149
}
141150

142151
@Override
143-
public String toString() {
144-
return "DomaConfig{" + "dataSource=" + dataSource + ", dialect=" + dialect
145-
+ ", jdbcLogger=" + jdbcLogger + ", sqlFileRepository="
146-
+ sqlFileRepository + ", requiresNewController=" + requiresNewController
147-
+ ", classHelper=" + classHelper + ", commandImplementors="
148-
+ commandImplementors + ", queryImplementors=" + queryImplementors
149-
+ ", unknownColumnHandler=" + unknownColumnHandler + ", naming=" + naming
150-
+ ", mapKeyNaming=" + mapKeyNaming + ", commenter=" + commenter
151-
+ ", entityListenerProvider=" + entityListenerProvider
152-
+ ", domaProperties=" + domaProperties + '}';
152+
public DuplicateColumnHandler getDuplicateColumnHandler() {
153+
return this.duplicateColumnHandler;
154+
}
155+
156+
@Override
157+
public ScriptFileLoader getScriptFileLoader() {
158+
return this.scriptFileLoader;
159+
}
160+
161+
@Override
162+
public SqlBuilderSettings getSqlBuilderSettings() {
163+
return this.sqlBuilderSettings;
164+
}
165+
166+
@Override
167+
public StatisticManager getStatisticManager() {
168+
return this.statisticManager;
153169
}
154170
}

doma-spring-boot-autoconfigure/src/main/java/org/seasar/doma/boot/autoconfigure/DomaConfigBuilder.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import org.seasar.doma.jdbc.*;
88
import org.seasar.doma.jdbc.dialect.Dialect;
9+
import org.seasar.doma.jdbc.statistic.StatisticManager;
910
import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
1011

1112
/**
@@ -40,6 +41,10 @@ public class DomaConfigBuilder {
4041
private MapKeyNaming mapKeyNaming = ConfigSupport.defaultMapKeyNaming;
4142
private Commenter commenter = ConfigSupport.defaultCommenter;
4243
private EntityListenerProvider entityListenerProvider;
44+
private DuplicateColumnHandler duplicateColumnHandler;
45+
private ScriptFileLoader scriptFileLoader;
46+
private SqlBuilderSettings sqlBuilderSettings;
47+
private StatisticManager statisticManager;
4348

4449
public DomaConfigBuilder(DomaProperties domaProperties) {
4550
this.domaProperties = Objects.requireNonNull(domaProperties);
@@ -174,6 +179,42 @@ public DomaConfigBuilder entityListenerProvider(
174179
return this;
175180
}
176181

182+
public DuplicateColumnHandler duplicateColumnHandler() {
183+
return duplicateColumnHandler;
184+
}
185+
186+
public DomaConfigBuilder duplicateColumnHandler(DuplicateColumnHandler duplicateColumnHandler) {
187+
this.duplicateColumnHandler = duplicateColumnHandler;
188+
return this;
189+
}
190+
191+
public ScriptFileLoader scriptFileLoader() {
192+
return scriptFileLoader;
193+
}
194+
195+
public DomaConfigBuilder scriptFileLoader(ScriptFileLoader scriptFileLoader) {
196+
this.scriptFileLoader = scriptFileLoader;
197+
return this;
198+
}
199+
200+
public SqlBuilderSettings sqlBuilderSettings() {
201+
return sqlBuilderSettings;
202+
}
203+
204+
public DomaConfigBuilder sqlBuilderSettings(SqlBuilderSettings sqlBuilderSettings) {
205+
this.sqlBuilderSettings = sqlBuilderSettings;
206+
return this;
207+
}
208+
209+
public StatisticManager statisticManager() {
210+
return statisticManager;
211+
}
212+
213+
public DomaConfigBuilder statisticManager(StatisticManager statisticManager) {
214+
this.statisticManager = statisticManager;
215+
return this;
216+
}
217+
177218
public DomaConfig build() {
178219
return new DomaConfig(this, domaProperties);
179220
}

doma-spring-boot-autoconfigure/src/main/java/org/seasar/doma/boot/autoconfigure/DomaProperties.java

Lines changed: 82 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,21 @@ public class DomaProperties {
9797
*/
9898
private int batchSize = 0;
9999

100+
/**
101+
* Properties for <code>org.seasar.doma.jdbc.SqlBuilderSettings</code>.
102+
*/
103+
private SqlBuilderSettings sqlBuilderSettings = new SqlBuilderSettings();
104+
105+
/**
106+
* Whether to throw an exception when duplicate columns are detected.
107+
*/
108+
private boolean throwExceptionIfDuplicateColumn = false;
109+
110+
/**
111+
* Properties for <code>org.seasar.doma.jdbc.statistic.DefaultStatisticManager</code>.
112+
*/
113+
private StatisticManager statisticManager = new StatisticManager();
114+
100115
public DialectType getDialect() {
101116
return dialect;
102117
}
@@ -185,6 +200,30 @@ public void setBatchSize(int batchSize) {
185200
this.batchSize = batchSize;
186201
}
187202

203+
public SqlBuilderSettings getSqlBuilderSettings() {
204+
return sqlBuilderSettings;
205+
}
206+
207+
public void setSqlBuilderSettings(SqlBuilderSettings sqlBuilderSettings) {
208+
this.sqlBuilderSettings = sqlBuilderSettings;
209+
}
210+
211+
public boolean isThrowExceptionIfDuplicateColumn() {
212+
return throwExceptionIfDuplicateColumn;
213+
}
214+
215+
public void setThrowExceptionIfDuplicateColumn(boolean throwExceptionIfDuplicateColumn) {
216+
this.throwExceptionIfDuplicateColumn = throwExceptionIfDuplicateColumn;
217+
}
218+
219+
public StatisticManager getStatisticManager() {
220+
return statisticManager;
221+
}
222+
223+
public void setStatisticManager(StatisticManager statisticManager) {
224+
this.statisticManager = statisticManager;
225+
}
226+
188227
public DomaConfigBuilder initializeDomaConfigBuilder() {
189228
return new DomaConfigBuilder(this).dialect(dialect.create())
190229
.sqlFileRepository(sqlFileRepository.create()).naming(naming.naming());
@@ -267,7 +306,9 @@ private static JdbcLogger slf4jJdbcLogger() {
267306
return (JdbcLogger) Class.forName("org.seasar.doma.jdbc.Slf4jJdbcLogger")
268307
.getConstructor().newInstance();
269308
} catch (ReflectiveOperationException roe) {
270-
logger.warn("org.seasar.doma.jdbc.Slf4jJdbcLogger could not be instantiated either.", roe);
309+
logger.warn(
310+
"org.seasar.doma.jdbc.Slf4jJdbcLogger could not be instantiated either.",
311+
roe);
271312
}
272313
throw e;
273314
}
@@ -284,15 +325,45 @@ public JdbcLogger create() {
284325
}
285326
}
286327

287-
@Override
288-
public String toString() {
289-
return "DomaProperties{" + "dialect=" + dialect + ", sqlFileRepository="
290-
+ sqlFileRepository + ", naming=" + naming
291-
+ ", exceptionTranslationEnabled=" + exceptionTranslationEnabled
292-
+ ", dataSourceName='" + dataSourceName + '\'' + ", exceptionSqlLogType="
293-
+ exceptionSqlLogType + ", jdbcLogger="
294-
+ jdbcLogger + ", maxRows=" + maxRows + ", fetchSize="
295-
+ fetchSize + ", queryTimeout=" + queryTimeout + ", batchSize="
296-
+ batchSize + '}';
328+
public static class SqlBuilderSettings {
329+
330+
/**
331+
* Whether the blank lines should be removed.
332+
*/
333+
private boolean shouldRemoveBlankLines = false;
334+
335+
/**
336+
* Whether padding is required for elements in an "IN" list in SQL queries.
337+
*/
338+
private boolean shouldRequireInListPadding = false;
339+
340+
public boolean isShouldRemoveBlankLines() {
341+
return shouldRemoveBlankLines;
342+
}
343+
344+
public void setShouldRemoveBlankLines(boolean shouldRemoveBlankLines) {
345+
this.shouldRemoveBlankLines = shouldRemoveBlankLines;
346+
}
347+
348+
public boolean isShouldRequireInListPadding() {
349+
return shouldRequireInListPadding;
350+
}
351+
352+
public void setShouldRequireInListPadding(boolean shouldRequireInListPadding) {
353+
this.shouldRequireInListPadding = shouldRequireInListPadding;
354+
}
355+
}
356+
357+
public static class StatisticManager {
358+
359+
private boolean enabled = false;
360+
361+
public boolean isEnabled() {
362+
return enabled;
363+
}
364+
365+
public void setEnabled(boolean enabled) {
366+
this.enabled = enabled;
367+
}
297368
}
298369
}

0 commit comments

Comments
 (0)