MybatisPlusLanguageDriverAutoConfiguration.java 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. /*
  2. * Copyright (c) 2011-2020, baomidou (jobob@qq.com).
  3. * <p>
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * the License at
  7. * <p>
  8. * https://www.apache.org/licenses/LICENSE-2.0
  9. * <p>
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package com.baomidou.mybatisplus.autoconfigure;
  17. import com.baomidou.mybatisplus.core.toolkit.Constants;
  18. import org.apache.ibatis.scripting.LanguageDriver;
  19. import org.mybatis.scripting.freemarker.FreeMarkerLanguageDriver;
  20. import org.mybatis.scripting.freemarker.FreeMarkerLanguageDriverConfig;
  21. import org.mybatis.scripting.thymeleaf.ThymeleafLanguageDriver;
  22. import org.mybatis.scripting.thymeleaf.ThymeleafLanguageDriverConfig;
  23. import org.mybatis.scripting.velocity.VelocityLanguageDriver;
  24. import org.mybatis.scripting.velocity.VelocityLanguageDriverConfig;
  25. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
  26. import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
  27. import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
  28. import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
  29. import org.springframework.boot.context.properties.ConfigurationProperties;
  30. import org.springframework.context.annotation.Bean;
  31. import org.springframework.context.annotation.Configuration;
  32. /**
  33. * {@link EnableAutoConfiguration Auto-Configuration} for MyBatis's scripting language drivers.
  34. * <p> copy from {@link org.mybatis.spring.boot.autoconfigure.MybatisLanguageDriverAutoConfiguration}</p>
  35. *
  36. * @author miemie
  37. * @since 2019-10-22
  38. */
  39. @Configuration
  40. @ConditionalOnClass(LanguageDriver.class)
  41. public class MybatisPlusLanguageDriverAutoConfiguration {
  42. private static final String CONFIGURATION_PROPERTY_PREFIX = Constants.MYBATIS_PLUS + ".scripting-language-driver";
  43. /**
  44. * Configuration class for mybatis-freemarker 1.1.x or under.
  45. */
  46. @Configuration
  47. @ConditionalOnClass(FreeMarkerLanguageDriver.class)
  48. @ConditionalOnMissingClass("org.mybatis.scripting.freemarker.FreeMarkerLanguageDriverConfig")
  49. public static class LegacyFreeMarkerConfiguration {
  50. @Bean
  51. @ConditionalOnMissingBean
  52. FreeMarkerLanguageDriver freeMarkerLanguageDriver() {
  53. return new FreeMarkerLanguageDriver();
  54. }
  55. }
  56. /**
  57. * Configuration class for mybatis-freemarker 1.2.x or above.
  58. */
  59. @Configuration
  60. @ConditionalOnClass({FreeMarkerLanguageDriver.class, FreeMarkerLanguageDriverConfig.class})
  61. public static class FreeMarkerConfiguration {
  62. @Bean
  63. @ConditionalOnMissingBean
  64. FreeMarkerLanguageDriver freeMarkerLanguageDriver(FreeMarkerLanguageDriverConfig config) {
  65. return new FreeMarkerLanguageDriver(config);
  66. }
  67. @Bean
  68. @ConditionalOnMissingBean
  69. @ConfigurationProperties(CONFIGURATION_PROPERTY_PREFIX + ".freemarker")
  70. public FreeMarkerLanguageDriverConfig freeMarkerLanguageDriverConfig() {
  71. return FreeMarkerLanguageDriverConfig.newInstance();
  72. }
  73. }
  74. /**
  75. * Configuration class for mybatis-velocity 2.0 or under.
  76. */
  77. @Configuration
  78. @ConditionalOnClass(org.mybatis.scripting.velocity.Driver.class)
  79. @ConditionalOnMissingClass("org.mybatis.scripting.velocity.VelocityLanguageDriverConfig")
  80. @SuppressWarnings("deprecation")
  81. public static class LegacyVelocityConfiguration {
  82. @Bean
  83. @ConditionalOnMissingBean
  84. org.mybatis.scripting.velocity.Driver velocityLanguageDriver() {
  85. return new org.mybatis.scripting.velocity.Driver();
  86. }
  87. }
  88. /**
  89. * Configuration class for mybatis-velocity 2.1.x or above.
  90. */
  91. @Configuration
  92. @ConditionalOnClass({VelocityLanguageDriver.class, VelocityLanguageDriverConfig.class})
  93. public static class VelocityConfiguration {
  94. @Bean
  95. @ConditionalOnMissingBean
  96. VelocityLanguageDriver velocityLanguageDriver(VelocityLanguageDriverConfig config) {
  97. return new VelocityLanguageDriver(config);
  98. }
  99. @Bean
  100. @ConditionalOnMissingBean
  101. @ConfigurationProperties(CONFIGURATION_PROPERTY_PREFIX + ".velocity")
  102. public VelocityLanguageDriverConfig velocityLanguageDriverConfig() {
  103. return VelocityLanguageDriverConfig.newInstance();
  104. }
  105. }
  106. @Configuration
  107. @ConditionalOnClass(ThymeleafLanguageDriver.class)
  108. public static class ThymeleafConfiguration {
  109. @Bean
  110. @ConditionalOnMissingBean
  111. ThymeleafLanguageDriver thymeleafLanguageDriver(ThymeleafLanguageDriverConfig config) {
  112. return new ThymeleafLanguageDriver(config);
  113. }
  114. @Bean
  115. @ConditionalOnMissingBean
  116. @ConfigurationProperties(CONFIGURATION_PROPERTY_PREFIX + ".thymeleaf")
  117. public ThymeleafLanguageDriverConfig thymeleafLanguageDriverConfig() {
  118. return ThymeleafLanguageDriverConfig.newInstance();
  119. }
  120. // This class provides to avoid the https://github.com/spring-projects/spring-boot/issues/21626 as workaround.
  121. @SuppressWarnings("unused")
  122. private static class MetadataThymeleafLanguageDriverConfig extends ThymeleafLanguageDriverConfig {
  123. @ConfigurationProperties(CONFIGURATION_PROPERTY_PREFIX + ".thymeleaf.dialect")
  124. @Override
  125. public DialectConfig getDialect() {
  126. return super.getDialect();
  127. }
  128. @ConfigurationProperties(CONFIGURATION_PROPERTY_PREFIX + ".thymeleaf.template-file")
  129. @Override
  130. public TemplateFileConfig getTemplateFile() {
  131. return super.getTemplateFile();
  132. }
  133. }
  134. }
  135. }