diff --git a/src/main/asciidoc/user-guide.adoc b/src/main/asciidoc/user-guide.adoc index 21677f6..9aa9423 100644 --- a/src/main/asciidoc/user-guide.adoc +++ b/src/main/asciidoc/user-guide.adoc @@ -1030,13 +1030,8 @@ If does not match all, it throw an exception that indicate not found a template * `com/example/mapper/BaseMapper/BaseMapper-{methodName}.sql` + (fallback using declaring class of mapper method and default database) -If you want to customize the template file path format, please call static setter methods of the `TemplateFilePathProvider`. - -[NOTE] -==== -If you applied an user defined `ThymeleafLanguageDriverConfig` for `ThymeleafLanguageDriver`, -please apply same instance to the `TemplateFilePathProvider` using the `setLanguageDriverConfig` method. -==== +If you want to customize the template file path format, +you can customize using the <> that start with `template-file.path-provider`. == Cautions for usage @@ -1129,6 +1124,28 @@ The mybatis-thymeleaf provides following properties for customizing configuratio |`String[]` |`"*.sql"` +4+|*Template file path provider configuration(TemplateFilePathProvider)* + +|`template-file.path-provider.prefix` +|The prefix for adding to template file path +|`String` +|`""` + +|`template-file.path-provider.includes-package-path` +|Whether includes package path part +|`Boolean` +|`true` (includes package path) + +|`template-file.path-provider.separate-directory-per-mapper` +|Whether separate directory per mapper +|`Boolean` +|`true` (separate directory per mapper) + +|`template-file.path-provider.includes-mapper-name-when-separate-directory` +|Whether includes mapper name into file name when separate directory per mapper +|`Boolean` +|`true` (includes mapper name) + 4+|*Dialect configuration* |`dialect.prefix` @@ -1157,13 +1174,17 @@ The mybatis-thymeleaf provides following properties for customizing configuratio [source,properties] .src/main/resources/mybatis-thymeleaf.properties ---- -use-2way = true +use-2way = false customizer = com.example.MyTemplateEngineCustomizer template-file.cache-enabled = true template-file.cache-ttl = 3600000 template-file.encoding = UTF-8 -template-file.base-dir = templates/sqls/ +template-file.base-dir = templates/ template-file.patterns = *sql, *.sql.template +template-file.path-provider.prefix = sqls/ +template-file.path-provider.includes-package-path = false +template-file.path-provider.separate-directory-per-mapper = false +template-file.path-provider.includes-mapper-name-when-separate-directory = false dialect.prefix = mybatis dialect.like-escape-char = ~ dialect.like-escape-clause-format = escape '%s' @@ -1178,13 +1199,17 @@ These properties can be specified via factory method of `ThymeleafLanguageDriver ---- configuration.getLanguageRegistry().register( new ThymeleafLanguageDriver(ThymeleafLanguageDriverConfig.newInstance(c -> { - c.setUse2way(true); + c.setUse2way(false); c.setCustomizer(CustomTemplateEngineCustomizer.class); c.getTemplateFile().setCacheEnabled(false); c.getTemplateFile().setCacheTtl(3600000L); c.getTemplateFile().setEncoding(StandardCharsets.UTF_8); - c.getTemplateFile().setBaseDir("templates/sqls/"); + c.getTemplateFile().setBaseDir("templates/"); c.getTemplateFile().setPatterns("*.sql", "*.sql.template"); + c.getTemplateFile().getPathProvider().setPrefix("sqls/"); + c.getTemplateFile().getPathProvider().setIncludesPackagePath(false); + c.getTemplateFile().getPathProvider().setSeparateDirectoryPerMapper(false); + c.getTemplateFile().getPathProvider().setIncludesMapperNameWhenSeparateDirectory(false); c.getDialect().setPrefix("mybatis"); c.getDialect().setLikeEscapeChar('~'); c.getDialect().setLikeEscapeClauseFormat("escape '%s'"); diff --git a/src/main/java/org/mybatis/scripting/thymeleaf/ThymeleafLanguageDriver.java b/src/main/java/org/mybatis/scripting/thymeleaf/ThymeleafLanguageDriver.java index 40fb61c..735a89a 100644 --- a/src/main/java/org/mybatis/scripting/thymeleaf/ThymeleafLanguageDriver.java +++ b/src/main/java/org/mybatis/scripting/thymeleaf/ThymeleafLanguageDriver.java @@ -29,6 +29,7 @@ import org.apache.ibatis.scripting.defaults.DefaultParameterHandler; import org.apache.ibatis.session.Configuration; import org.mybatis.scripting.thymeleaf.expression.Likes; +import org.mybatis.scripting.thymeleaf.support.TemplateFilePathProvider; import org.thymeleaf.ITemplateEngine; import org.thymeleaf.TemplateEngine; import org.thymeleaf.templatemode.TemplateMode; @@ -60,6 +61,7 @@ public ThymeleafLanguageDriver() { */ public ThymeleafLanguageDriver(ThymeleafLanguageDriverConfig config) { this.templateEngine = createDefaultTemplateEngine(config); + TemplateFilePathProvider.setLanguageDriverConfig(config); } /** diff --git a/src/main/java/org/mybatis/scripting/thymeleaf/ThymeleafLanguageDriverConfig.java b/src/main/java/org/mybatis/scripting/thymeleaf/ThymeleafLanguageDriverConfig.java index f94717d..a2c3ade 100644 --- a/src/main/java/org/mybatis/scripting/thymeleaf/ThymeleafLanguageDriverConfig.java +++ b/src/main/java/org/mybatis/scripting/thymeleaf/ThymeleafLanguageDriverConfig.java @@ -179,6 +179,11 @@ public static class TemplateFileConfig { */ private Long cacheTtl; + /** + * The template file path provider configuration. + */ + private final PathProviderConfig pathProvider = new PathProviderConfig(); + /** * Get the character encoding for reading template resource file. *

@@ -289,6 +294,136 @@ public void setCacheTtl(Long cacheTtl) { this.cacheTtl = cacheTtl; } + /** + * Get the template file path provider configuration. + * + * @return the template file path provider configuration + * @since 1.0.1 + */ + public PathProviderConfig getPathProvider() { + return pathProvider; + } + + /** + * The template file path provider configuration. + * + * @since 1.0.1 + */ + public static class PathProviderConfig { + + /** + * The prefix for adding to template file path. + */ + private String prefix = ""; + + /** + * Whether includes package path part. + */ + private boolean includesPackagePath = true; + + /** + * Whether separate directory per mapper. + */ + private boolean separateDirectoryPerMapper = true; + + /** + * Whether includes mapper name into file name when separate directory per mapper. + */ + private boolean includesMapperNameWhenSeparateDirectory = true; + + /** + * Get a prefix for adding to template file path. + *

+ * Default is {@code ""}. + *

+ * + * @return a prefix for adding to template file path + */ + public String getPrefix() { + return prefix; + } + + /** + * Set the prefix for adding to template file path. + * + * @param prefix + * The prefix for adding to template file path + */ + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + /** + * Get whether includes package path part. + *

+ * Default is {@code true}. + *

+ * + * @return If includes package path, return {@code true} + */ + public boolean isIncludesPackagePath() { + return includesPackagePath; + } + + /** + * Set whether includes package path part. + * + * @param includesPackagePath + * If want to includes, set {@code true} + */ + public void setIncludesPackagePath(boolean includesPackagePath) { + this.includesPackagePath = includesPackagePath; + } + + /** + * Get whether separate directory per mapper. + * + * @return If separate directory per mapper, return {@code true} + */ + public boolean isSeparateDirectoryPerMapper() { + return separateDirectoryPerMapper; + } + + /** + * Set whether separate directory per mapper. + *

+ * Default is {@code true}. + *

+ * + * @param separateDirectoryPerMapper + * If want to separate directory, set {@code true} + */ + public void setSeparateDirectoryPerMapper(boolean separateDirectoryPerMapper) { + this.separateDirectoryPerMapper = separateDirectoryPerMapper; + } + + /** + * Get whether includes mapper name into file name when separate directory per mapper. + *

+ * Default is {@code true}. + *

+ * + * @return If includes mapper name, set {@code true} + */ + public boolean isIncludesMapperNameWhenSeparateDirectory() { + return includesMapperNameWhenSeparateDirectory; + } + + /** + * Set whether includes mapper name into file name when separate directory per mapper. + *

+ * Default is {@code true}. + *

+ * + * @param includesMapperNameWhenSeparateDirectory + * If want to includes, set {@code true} + */ + public void setIncludesMapperNameWhenSeparateDirectory(boolean includesMapperNameWhenSeparateDirectory) { + this.includesMapperNameWhenSeparateDirectory = includesMapperNameWhenSeparateDirectory; + } + + } + } /** @@ -465,6 +600,33 @@ public void setLikeAdditionalEscapeTargetChars(Character... likeAdditionalEscape * {@code "*.sql"} * * + * + * Template file path provider configuration(TemplateFilePathProvider) + * + * + * template-file.path-provider.prefix + * The prefix for adding to template file path + * {@code ""} + * + * + * + * template-file.path-provider.includes-package-path + * Whether includes package path part + * {@code true} + * + * + * + * template-file.patterns + * Whether separate directory per mapper + * {@code true} + * + * + * + * template-file.patterns + * Whether includes mapper name into file name when separate directory per mapper + * {@code true} + * + * * Dialect configuration * * diff --git a/src/main/java/org/mybatis/scripting/thymeleaf/support/TemplateFilePathProvider.java b/src/main/java/org/mybatis/scripting/thymeleaf/support/TemplateFilePathProvider.java index 49da85f..d13ae98 100644 --- a/src/main/java/org/mybatis/scripting/thymeleaf/support/TemplateFilePathProvider.java +++ b/src/main/java/org/mybatis/scripting/thymeleaf/support/TemplateFilePathProvider.java @@ -23,6 +23,7 @@ import org.apache.ibatis.io.Resources; import org.mybatis.scripting.thymeleaf.ThymeleafLanguageDriver; import org.mybatis.scripting.thymeleaf.ThymeleafLanguageDriverConfig; +import org.mybatis.scripting.thymeleaf.ThymeleafLanguageDriverConfig.TemplateFileConfig.PathProviderConfig; /** * The SQL provider class that return the SQL template file path.
@@ -71,65 +72,9 @@ public class TemplateFilePathProvider { private static final ThymeleafLanguageDriverConfig DEFAULT_LANGUAGE_DRIVER_CONFIG = ThymeleafLanguageDriverConfig .newInstance(); - private static String prefix = ""; - private static boolean includesPackagePath = true; - private static boolean separateDirectoryPerMapper = true; - private static boolean includesMapperNameWhenSeparateDirectory = true; private static PathGenerator pathGenerator = DEFAULT_PATH_GENERATOR; private static ThymeleafLanguageDriverConfig languageDriverConfig = DEFAULT_LANGUAGE_DRIVER_CONFIG; - /** - * Set a prefix for adding to template file path. - *

- * Default is {@code ""}. - *

- * - * @param prefix - * a prefix for adding to template file path - */ - public static void setPrefix(String prefix) { - TemplateFilePathProvider.prefix = Optional.ofNullable(prefix).orElse(""); - } - - /** - * Set whether includes package path part. - *

- * Default is {@code true}. - *

- * - * @param includesPackagePath - * If want to includes, set {@code true} - */ - public static void setIncludesPackagePath(boolean includesPackagePath) { - TemplateFilePathProvider.includesPackagePath = includesPackagePath; - } - - /** - * Set whether separate directory per mapper. - *

- * Default is {@code true}. - *

- * - * @param separateDirectoryPerMapper - * If want to separate directory, set {@code true} - */ - public static void setSeparateDirectoryPerMapper(boolean separateDirectoryPerMapper) { - TemplateFilePathProvider.separateDirectoryPerMapper = separateDirectoryPerMapper; - } - - /** - * Set whether includes mapper name into file name when separate directory per mapper. - *

- * Default is {@code true}. - *

- * - * @param includesMapperNameWhenSeparateDirectory - * If want to includes, set {@code true} - */ - public static void setIncludesMapperNameWhenSeparateDirectory(boolean includesMapperNameWhenSeparateDirectory) { - TemplateFilePathProvider.includesMapperNameWhenSeparateDirectory = includesMapperNameWhenSeparateDirectory; - } - /** * Set custom implementation for {@link PathGenerator}. * @@ -173,15 +118,6 @@ public static void setLanguageDriverConfig(ThymeleafLanguageDriverConfig languag * database) * *
- * If you want to customize path format, please call the following methods. - * * * @param context * a context of SQL provider @@ -225,17 +161,18 @@ private static String generateTemplatePath(Class type, Method method, String String packageName = pkg == null ? "" : pkg.getName(); String className = type.getName().substring(packageName.length() + (packageName.length() == 0 ? 0 : 1)); + PathProviderConfig pathProviderConfig = languageDriverConfig.getTemplateFile().getPathProvider(); StringBuilder path = new StringBuilder(); - if (!prefix.isEmpty()) { - path.append(prefix); + if (!pathProviderConfig.getPrefix().isEmpty()) { + path.append(pathProviderConfig.getPrefix()); } - if (includesPackagePath && !packageName.isEmpty()) { + if (pathProviderConfig.isIncludesPackagePath() && !packageName.isEmpty()) { path.append(packageName.replace('.', '/')).append('/'); } path.append(className); - if (separateDirectoryPerMapper) { + if (pathProviderConfig.isSeparateDirectoryPerMapper()) { path.append('/'); - if (includesMapperNameWhenSeparateDirectory) { + if (pathProviderConfig.isIncludesMapperNameWhenSeparateDirectory()) { path.append(className).append('-'); } } else { @@ -246,6 +183,7 @@ private static String generateTemplatePath(Class type, Method method, String path.append('-').append(databaseId); } path.append(".sql"); + System.out.println(path); return path.toString(); } diff --git a/src/test/java/org/mybatis/scripting/thymeleaf/ThymeleafLanguageDriverTest.java b/src/test/java/org/mybatis/scripting/thymeleaf/ThymeleafLanguageDriverTest.java index 543dc2f..a91e1a3 100644 --- a/src/test/java/org/mybatis/scripting/thymeleaf/ThymeleafLanguageDriverTest.java +++ b/src/test/java/org/mybatis/scripting/thymeleaf/ThymeleafLanguageDriverTest.java @@ -16,7 +16,6 @@ package org.mybatis.scripting.thymeleaf; import java.io.Reader; -import java.io.UncheckedIOException; import java.lang.reflect.InvocationTargetException; import java.nio.charset.StandardCharsets; import java.sql.Connection; @@ -47,6 +46,8 @@ import org.mybatis.scripting.thymeleaf.integrationtest.domain.Name; import org.mybatis.scripting.thymeleaf.integrationtest.mapper.NameMapper; import org.mybatis.scripting.thymeleaf.integrationtest.mapper.NameParam; +import org.mybatis.scripting.thymeleaf.integrationtest.mapper.TemplateFilePathProviderMapper; +import org.mybatis.scripting.thymeleaf.support.TemplateFilePathProvider; import org.thymeleaf.TemplateEngine; import org.thymeleaf.templatemode.TemplateMode; import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; @@ -87,6 +88,12 @@ static void setUp() throws Exception { sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); } + @BeforeEach + @AfterEach + void cleanup() { + TemplateFilePathProvider.setLanguageDriverConfig(null); + } + @BeforeEach void saveCurrentConfig() { currentConfigFile = System.getProperty("mybatis-thymeleaf.config"); @@ -159,7 +166,7 @@ void testCustomWithCustomConfigFileUsingSystemProperty() { Assertions.assertFalse(classLoaderTemplateResolver.isCacheable()); Assertions.assertEquals(Long.valueOf(30000), classLoaderTemplateResolver.getCacheTTLMs()); Assertions.assertEquals("ISO-8859-1", classLoaderTemplateResolver.getCharacterEncoding()); - Assertions.assertEquals("/templates/sqls/", classLoaderTemplateResolver.getPrefix()); + Assertions.assertEquals("templates/", classLoaderTemplateResolver.getPrefix()); Assertions.assertEquals(new LinkedHashSet<>(Arrays.asList("*.sql", "*.sql.template")), classLoaderTemplateResolver.getResolvablePatterns()); @@ -180,9 +187,10 @@ void testCustomWithCustomConfigFileUsingSystemProperty() { @Test void testCustomWithCustomConfigFileUsingMethodArgument() { + ThymeleafLanguageDriverConfig thymeleafLanguageDriverConfig = ThymeleafLanguageDriverConfig + .newInstance("mybatis-thymeleaf-custom.properties"); Configuration configuration = new Configuration(); - configuration.getLanguageRegistry().register( - new ThymeleafLanguageDriver(ThymeleafLanguageDriverConfig.newInstance("mybatis-thymeleaf-custom.properties"))); + configuration.getLanguageRegistry().register(new ThymeleafLanguageDriver(thymeleafLanguageDriverConfig)); configuration.setDefaultScriptingLanguage(ThymeleafLanguageDriver.class); new SqlSessionFactoryBuilder().build(configuration); @@ -196,7 +204,7 @@ void testCustomWithCustomConfigFileUsingMethodArgument() { Assertions.assertFalse(classLoaderTemplateResolver.isCacheable()); Assertions.assertEquals(Long.valueOf(30000), classLoaderTemplateResolver.getCacheTTLMs()); Assertions.assertEquals("ISO-8859-1", classLoaderTemplateResolver.getCharacterEncoding()); - Assertions.assertEquals("/templates/sqls/", classLoaderTemplateResolver.getPrefix()); + Assertions.assertEquals("templates/", classLoaderTemplateResolver.getPrefix()); Assertions.assertEquals(new LinkedHashSet<>(Arrays.asList("*.sql", "*.sql.template")), classLoaderTemplateResolver.getResolvablePatterns()); @@ -213,26 +221,38 @@ void testCustomWithCustomConfigFileUsingMethodArgument() { Assertions.assertEquals("escape '~'", expression.escapeClause()); Assertions.assertEquals("a~%~_~~b", expression.escapeWildcard("a%_~b")); }); + + Assertions.assertEquals("sqls/", thymeleafLanguageDriverConfig.getTemplateFile().getPathProvider().getPrefix()); + Assertions.assertFalse(thymeleafLanguageDriverConfig.getTemplateFile().getPathProvider().isIncludesPackagePath()); + Assertions + .assertFalse(thymeleafLanguageDriverConfig.getTemplateFile().getPathProvider().isSeparateDirectoryPerMapper()); + Assertions.assertFalse( + thymeleafLanguageDriverConfig.getTemplateFile().getPathProvider().isIncludesMapperNameWhenSeparateDirectory()); + } @Test void testCustomWithCustomizerFunction() { System.setProperty("mybatis-thymeleaf.config.file", "mybatis-thymeleaf-empty.properties"); + ThymeleafLanguageDriverConfig thymeleafLanguageDriverConfig = ThymeleafLanguageDriverConfig.newInstance(c -> { + c.setUse2way(false); + c.setCustomizer(CustomTemplateEngineCustomizer.class); + c.getTemplateFile().setCacheEnabled(false); + c.getTemplateFile().setCacheTtl(30000L); + c.getTemplateFile().setEncoding(StandardCharsets.ISO_8859_1); + c.getTemplateFile().setBaseDir("templates/"); + c.getTemplateFile().setPatterns("*.sql", "*.sql.template"); + c.getTemplateFile().getPathProvider().setPrefix("sqls/"); + c.getTemplateFile().getPathProvider().setIncludesPackagePath(false); + c.getTemplateFile().getPathProvider().setSeparateDirectoryPerMapper(false); + c.getTemplateFile().getPathProvider().setIncludesMapperNameWhenSeparateDirectory(false); + c.getDialect().setPrefix("mbs"); + c.getDialect().setLikeEscapeChar('~'); + c.getDialect().setLikeEscapeClauseFormat("escape '%s'"); + c.getDialect().setLikeAdditionalEscapeTargetChars('%', '_'); + }); Configuration configuration = new Configuration(); - configuration.getLanguageRegistry() - .register(new ThymeleafLanguageDriver(ThymeleafLanguageDriverConfig.newInstance(c -> { - c.setUse2way(false); - c.setCustomizer(CustomTemplateEngineCustomizer.class); - c.getTemplateFile().setCacheEnabled(false); - c.getTemplateFile().setCacheTtl(30000L); - c.getTemplateFile().setEncoding(StandardCharsets.ISO_8859_1); - c.getTemplateFile().setBaseDir("/templates/sqls/"); - c.getTemplateFile().setPatterns("*.sql", "*.sql.template"); - c.getDialect().setPrefix("mbs"); - c.getDialect().setLikeEscapeChar('~'); - c.getDialect().setLikeEscapeClauseFormat("escape '%s'"); - c.getDialect().setLikeAdditionalEscapeTargetChars('%', '_'); - }))); + configuration.getLanguageRegistry().register(new ThymeleafLanguageDriver(thymeleafLanguageDriverConfig)); configuration.setDefaultScriptingLanguage(ThymeleafLanguageDriver.class); new SqlSessionFactoryBuilder().build(configuration); @@ -246,7 +266,7 @@ void testCustomWithCustomizerFunction() { Assertions.assertFalse(classLoaderTemplateResolver.isCacheable()); Assertions.assertEquals(Long.valueOf(30000), classLoaderTemplateResolver.getCacheTTLMs()); Assertions.assertEquals("ISO-8859-1", classLoaderTemplateResolver.getCharacterEncoding()); - Assertions.assertEquals("/templates/sqls/", classLoaderTemplateResolver.getPrefix()); + Assertions.assertEquals("templates/", classLoaderTemplateResolver.getPrefix()); Assertions.assertEquals(new LinkedHashSet<>(Arrays.asList("*.sql", "*.sql.template")), classLoaderTemplateResolver.getResolvablePatterns()); @@ -263,6 +283,13 @@ void testCustomWithCustomizerFunction() { Assertions.assertEquals("escape '~'", expression.escapeClause()); Assertions.assertEquals("a~%~_~~b", expression.escapeWildcard("a%_~b")); }); + + Assertions.assertEquals("sqls/", thymeleafLanguageDriverConfig.getTemplateFile().getPathProvider().getPrefix()); + Assertions.assertFalse(thymeleafLanguageDriverConfig.getTemplateFile().getPathProvider().isIncludesPackagePath()); + Assertions + .assertFalse(thymeleafLanguageDriverConfig.getTemplateFile().getPathProvider().isSeparateDirectoryPerMapper()); + Assertions.assertFalse( + thymeleafLanguageDriverConfig.getTemplateFile().getPathProvider().isIncludesMapperNameWhenSeparateDirectory()); } @Test @@ -275,15 +302,21 @@ void testCustomWithBuilderUsingCustomProperties() { customProperties.setProperty("template-file.cache-enabled", "false"); customProperties.setProperty("template-file.cache-ttl", "30000"); customProperties.setProperty("template-file.encoding", "ISO-8859-1"); - customProperties.setProperty("template-file.base-dir", "/templates/sqls/"); + customProperties.setProperty("template-file.base-dir", "templates/"); customProperties.setProperty("template-file.patterns", "*.sql, *.sql.template"); + customProperties.setProperty("template-file.path-provider.prefix", "sqls/"); + customProperties.setProperty("template-file.path-provider.includes-package-path", "false"); + customProperties.setProperty("template-file.path-provider.separate-directory-per-mapper", "false"); + customProperties.setProperty("template-file.path-provider.includes-mapper-name-when-separate-directory", "false"); customProperties.setProperty("dialect.prefix", "mbs"); customProperties.setProperty("dialect.like-escape-char", "~"); customProperties.setProperty("dialect.like-escape-clause-format", "escape '%s'"); customProperties.setProperty("dialect.like-additional-escape-target-chars", "%,_"); - configuration.getLanguageRegistry() - .register(new ThymeleafLanguageDriver(ThymeleafLanguageDriverConfig.newInstance(customProperties))); + ThymeleafLanguageDriverConfig thymeleafLanguageDriverConfig = ThymeleafLanguageDriverConfig + .newInstance(customProperties); + + configuration.getLanguageRegistry().register(new ThymeleafLanguageDriver(thymeleafLanguageDriverConfig)); configuration.setDefaultScriptingLanguage(ThymeleafLanguageDriver.class); new SqlSessionFactoryBuilder().build(configuration); @@ -297,7 +330,7 @@ void testCustomWithBuilderUsingCustomProperties() { Assertions.assertFalse(classLoaderTemplateResolver.isCacheable()); Assertions.assertEquals(Long.valueOf(30000), classLoaderTemplateResolver.getCacheTTLMs()); Assertions.assertEquals("ISO-8859-1", classLoaderTemplateResolver.getCharacterEncoding()); - Assertions.assertEquals("/templates/sqls/", classLoaderTemplateResolver.getPrefix()); + Assertions.assertEquals("templates/", classLoaderTemplateResolver.getPrefix()); Assertions.assertEquals(new LinkedHashSet<>(Arrays.asList("*.sql", "*.sql.template")), classLoaderTemplateResolver.getResolvablePatterns()); @@ -314,6 +347,13 @@ void testCustomWithBuilderUsingCustomProperties() { Assertions.assertEquals("escape '~'", expression.escapeClause()); Assertions.assertEquals("a~%~_~~b", expression.escapeWildcard("a%_~b")); }); + + Assertions.assertEquals("sqls/", thymeleafLanguageDriverConfig.getTemplateFile().getPathProvider().getPrefix()); + Assertions.assertFalse(thymeleafLanguageDriverConfig.getTemplateFile().getPathProvider().isIncludesPackagePath()); + Assertions + .assertFalse(thymeleafLanguageDriverConfig.getTemplateFile().getPathProvider().isSeparateDirectoryPerMapper()); + Assertions.assertFalse( + thymeleafLanguageDriverConfig.getTemplateFile().getPathProvider().isIncludesMapperNameWhenSeparateDirectory()); } @Test diff --git a/src/test/java/org/mybatis/scripting/thymeleaf/integrationtest/TemplateFilePathProviderMapperTest.java b/src/test/java/org/mybatis/scripting/thymeleaf/integrationtest/TemplateFilePathProviderMapperTest.java index a370a92..603fd26 100644 --- a/src/test/java/org/mybatis/scripting/thymeleaf/integrationtest/TemplateFilePathProviderMapperTest.java +++ b/src/test/java/org/mybatis/scripting/thymeleaf/integrationtest/TemplateFilePathProviderMapperTest.java @@ -33,9 +33,9 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.DisabledIfSystemProperty; import org.mybatis.scripting.thymeleaf.ThymeleafLanguageDriver; +import org.mybatis.scripting.thymeleaf.ThymeleafLanguageDriverConfig; import org.mybatis.scripting.thymeleaf.integrationtest.domain.Name; import org.mybatis.scripting.thymeleaf.integrationtest.mapper.TemplateFilePathProviderMapper; -import org.mybatis.scripting.thymeleaf.support.TemplateFilePathProvider; @DisabledIfSystemProperty(named = "mybatis.version", matches = "3\\.4\\..*|3\\.5\\.0") class TemplateFilePathProviderMapperTest { @@ -59,14 +59,16 @@ static void setUp() throws Exception { } } - TemplateFilePathProvider.setPrefix("sql/"); - TemplateFilePathProvider.setIncludesPackagePath(false); - TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("development", transactionFactory, dataSource); Configuration configuration = new Configuration(environment); configuration.setMapUnderscoreToCamelCase(true); + configuration.getLanguageRegistry() + .register(new ThymeleafLanguageDriver(ThymeleafLanguageDriverConfig.newInstance(c -> { + c.getTemplateFile().getPathProvider().setPrefix("sql/"); + c.getTemplateFile().getPathProvider().setIncludesPackagePath(false); + }))); configuration.setDefaultScriptingLanguage(ThymeleafLanguageDriver.class); configuration.addMapper(TemplateFilePathProviderMapper.class); diff --git a/src/test/java/org/mybatis/scripting/thymeleaf/support/TemplateFilePathProviderTest.java b/src/test/java/org/mybatis/scripting/thymeleaf/support/TemplateFilePathProviderTest.java index d82c717..40d3a75 100644 --- a/src/test/java/org/mybatis/scripting/thymeleaf/support/TemplateFilePathProviderTest.java +++ b/src/test/java/org/mybatis/scripting/thymeleaf/support/TemplateFilePathProviderTest.java @@ -31,10 +31,6 @@ class TemplateFilePathProviderTest { @BeforeEach @AfterEach void clean() { - TemplateFilePathProvider.setPrefix(null); - TemplateFilePathProvider.setIncludesPackagePath(true); - TemplateFilePathProvider.setSeparateDirectoryPerMapper(true); - TemplateFilePathProvider.setIncludesMapperNameWhenSeparateDirectory(true); TemplateFilePathProvider.setCustomTemplateFilePathGenerator(null); TemplateFilePathProvider.setLanguageDriverConfig(null); } @@ -93,10 +89,11 @@ void notFoundSqlFile() { @Test void includesPackagePathAndSeparatesDirectoryPerMapperIsFalse() { - TemplateFilePathProvider.setIncludesPackagePath(false); - TemplateFilePathProvider.setSeparateDirectoryPerMapper(false); - TemplateFilePathProvider.setLanguageDriverConfig(ThymeleafLanguageDriverConfig - .newInstance(c -> c.getTemplateFile().setBaseDir("org/mybatis/scripting/thymeleaf/support/sql"))); + TemplateFilePathProvider.setLanguageDriverConfig(ThymeleafLanguageDriverConfig.newInstance(c -> { + c.getTemplateFile().setBaseDir("org/mybatis/scripting/thymeleaf/support/sql"); + c.getTemplateFile().getPathProvider().setIncludesPackagePath(false); + c.getTemplateFile().getPathProvider().setSeparateDirectoryPerMapper(false); + })); String path = TemplateFilePathProvider.providePath(TestMapper.class, extractMethod(TestMapper.class, "selectAllDesc"), null); Assertions.assertEquals("TestMapper-selectAllDesc.sql", path); @@ -104,10 +101,11 @@ void includesPackagePathAndSeparatesDirectoryPerMapperIsFalse() { @Test void baseDirEndWithSlash() { - TemplateFilePathProvider.setIncludesPackagePath(false); - TemplateFilePathProvider.setSeparateDirectoryPerMapper(false); - TemplateFilePathProvider.setLanguageDriverConfig(ThymeleafLanguageDriverConfig - .newInstance(c -> c.getTemplateFile().setBaseDir("org/mybatis/scripting/thymeleaf/support/sql/"))); + TemplateFilePathProvider.setLanguageDriverConfig(ThymeleafLanguageDriverConfig.newInstance(c -> { + c.getTemplateFile().setBaseDir("org/mybatis/scripting/thymeleaf/support/sql/"); + c.getTemplateFile().getPathProvider().setIncludesPackagePath(false); + c.getTemplateFile().getPathProvider().setSeparateDirectoryPerMapper(false); + })); String path = TemplateFilePathProvider.providePath(TestMapper.class, extractMethod(TestMapper.class, "selectAllDesc"), null); Assertions.assertEquals("TestMapper-selectAllDesc.sql", path); @@ -115,7 +113,8 @@ void baseDirEndWithSlash() { @Test void includesMapperNameWhenSeparateDirectoryIsFalse() { - TemplateFilePathProvider.setIncludesMapperNameWhenSeparateDirectory(false); + TemplateFilePathProvider.setLanguageDriverConfig(ThymeleafLanguageDriverConfig + .newInstance(c -> c.getTemplateFile().getPathProvider().setIncludesMapperNameWhenSeparateDirectory(false))); String path = TemplateFilePathProvider.providePath(TestMapper.class, extractMethod(TestMapper.class, "selectAllAsc"), null); Assertions.assertEquals("org/mybatis/scripting/thymeleaf/support/TestMapper/selectAllAsc.sql", path); @@ -123,9 +122,11 @@ void includesMapperNameWhenSeparateDirectoryIsFalse() { @Test void prefix() { - TemplateFilePathProvider.setPrefix("org/mybatis/scripting/thymeleaf/support/sql/"); - TemplateFilePathProvider.setIncludesPackagePath(false); - TemplateFilePathProvider.setSeparateDirectoryPerMapper(false); + TemplateFilePathProvider.setLanguageDriverConfig(ThymeleafLanguageDriverConfig.newInstance(c -> { + c.getTemplateFile().getPathProvider().setPrefix("org/mybatis/scripting/thymeleaf/support/sql/"); + c.getTemplateFile().getPathProvider().setIncludesPackagePath(false); + c.getTemplateFile().getPathProvider().setSeparateDirectoryPerMapper(false); + })); String path = TemplateFilePathProvider.providePath(TestMapper.class, extractMethod(TestMapper.class, "selectAllDesc"), null); Assertions.assertEquals("org/mybatis/scripting/thymeleaf/support/sql/TestMapper-selectAllDesc.sql", path); diff --git a/src/test/resources/mybatis-thymeleaf-custom.properties b/src/test/resources/mybatis-thymeleaf-custom.properties index cbfdbcc..a5beefe 100644 --- a/src/test/resources/mybatis-thymeleaf-custom.properties +++ b/src/test/resources/mybatis-thymeleaf-custom.properties @@ -19,8 +19,12 @@ customizer=org.mybatis.scripting.thymeleaf.CustomTemplateEngineCustomizer template-file.cache-enabled=false template-file.cache-ttl=30000 template-file.encoding=ISO-8859-1 -template-file.base-dir=/templates/sqls/ +template-file.base-dir=templates/ template-file.patterns= *.sql , *.sql.template +template-file.path-provider.prefix=sqls/ +template-file.path-provider.includes-package-path=false +template-file.path-provider.separate-directory-per-mapper=false +template-file.path-provider.includes-mapper-name-when-separate-directory=false dialect.prefix=mybatis dialect.like-escape-char=~ dialect.like-escape-clause-format=escape '%s' 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