123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- /*
- * Copyright (c) 2011-2022, baomidou (jobob@qq.com).
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package com.baomidou.mybatisplus.autoconfigure;
- import com.baomidou.mybatisplus.core.MybatisParameterHandler;
- import com.baomidou.mybatisplus.core.toolkit.Constants;
- import com.baomidou.mybatisplus.extension.scripting.MybatisFreeMarkerLanguageDriver;
- import com.baomidou.mybatisplus.extension.scripting.MybatisThymeleafLanguageDriver;
- import com.baomidou.mybatisplus.extension.scripting.MybatisVelocityLanguageDriver;
- import org.apache.ibatis.executor.parameter.ParameterHandler;
- import org.apache.ibatis.mapping.BoundSql;
- import org.apache.ibatis.mapping.MappedStatement;
- import org.apache.ibatis.scripting.LanguageDriver;
- import org.mybatis.scripting.freemarker.FreeMarkerLanguageDriver;
- import org.mybatis.scripting.freemarker.FreeMarkerLanguageDriverConfig;
- import org.mybatis.scripting.thymeleaf.ThymeleafLanguageDriver;
- import org.mybatis.scripting.thymeleaf.ThymeleafLanguageDriverConfig;
- import org.mybatis.scripting.velocity.VelocityLanguageDriver;
- import org.mybatis.scripting.velocity.VelocityLanguageDriverConfig;
- import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
- import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
- import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
- import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
- import org.springframework.boot.context.properties.ConfigurationProperties;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.context.annotation.Lazy;
- /**
- * {@link EnableAutoConfiguration Auto-Configuration} for MyBatis's scripting language drivers.
- * <p> copy from {@link org.mybatis.spring.boot.autoconfigure.MybatisLanguageDriverAutoConfiguration}</p>
- *
- * @author miemie
- * @since 2019-10-22
- */
- @Lazy
- @Configuration(proxyBeanMethods = false)
- @ConditionalOnClass(LanguageDriver.class)
- public class MybatisPlusLanguageDriverAutoConfiguration {
- private static final String CONFIGURATION_PROPERTY_PREFIX = Constants.MYBATIS_PLUS + ".scripting-language-driver";
- /**
- * Configuration class for mybatis-freemarker 1.1.x or under.
- */
- @Configuration
- @ConditionalOnClass(FreeMarkerLanguageDriver.class)
- @ConditionalOnMissingClass("org.mybatis.scripting.freemarker.FreeMarkerLanguageDriverConfig")
- public static class LegacyFreeMarkerConfiguration {
- @Bean
- @ConditionalOnMissingBean
- FreeMarkerLanguageDriver freeMarkerLanguageDriver() {
- return new MybatisFreeMarkerLanguageDriver();
- }
- }
- /**
- * Configuration class for mybatis-freemarker 1.2.x or above.
- */
- @Configuration
- @ConditionalOnClass({FreeMarkerLanguageDriver.class, FreeMarkerLanguageDriverConfig.class})
- public static class FreeMarkerConfiguration {
- @Bean
- @ConditionalOnMissingBean
- FreeMarkerLanguageDriver freeMarkerLanguageDriver(FreeMarkerLanguageDriverConfig config) {
- return new MybatisFreeMarkerLanguageDriver(config);
- }
- @Bean
- @ConditionalOnMissingBean
- @ConfigurationProperties(CONFIGURATION_PROPERTY_PREFIX + ".freemarker")
- public FreeMarkerLanguageDriverConfig freeMarkerLanguageDriverConfig() {
- return FreeMarkerLanguageDriverConfig.newInstance();
- }
- }
- /**
- * Configuration class for mybatis-velocity 2.0 or under.
- */
- @Configuration
- @ConditionalOnClass(org.mybatis.scripting.velocity.Driver.class)
- @ConditionalOnMissingClass("org.mybatis.scripting.velocity.VelocityLanguageDriverConfig")
- @SuppressWarnings("deprecation")
- public static class LegacyVelocityConfiguration {
- @Bean
- @ConditionalOnMissingBean
- org.mybatis.scripting.velocity.Driver velocityLanguageDriver() {
- return new org.mybatis.scripting.velocity.Driver() {
- @Override
- public ParameterHandler createParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) {
- return new MybatisParameterHandler(mappedStatement, parameterObject, boundSql);
- }
- };
- }
- }
- /**
- * Configuration class for mybatis-velocity 2.1.x or above.
- */
- @Configuration
- @ConditionalOnClass({VelocityLanguageDriver.class, VelocityLanguageDriverConfig.class})
- public static class VelocityConfiguration {
- @Bean
- @ConditionalOnMissingBean
- VelocityLanguageDriver velocityLanguageDriver(VelocityLanguageDriverConfig config) {
- return new MybatisVelocityLanguageDriver(config);
- }
- @Bean
- @ConditionalOnMissingBean
- @ConfigurationProperties(CONFIGURATION_PROPERTY_PREFIX + ".velocity")
- public VelocityLanguageDriverConfig velocityLanguageDriverConfig() {
- return VelocityLanguageDriverConfig.newInstance();
- }
- }
- @Configuration
- @ConditionalOnClass(ThymeleafLanguageDriver.class)
- public static class ThymeleafConfiguration {
- @Bean
- @ConditionalOnMissingBean
- ThymeleafLanguageDriver thymeleafLanguageDriver(ThymeleafLanguageDriverConfig config) {
- return new MybatisThymeleafLanguageDriver(config);
- }
- @Bean
- @ConditionalOnMissingBean
- @ConfigurationProperties(CONFIGURATION_PROPERTY_PREFIX + ".thymeleaf")
- public ThymeleafLanguageDriverConfig thymeleafLanguageDriverConfig() {
- return ThymeleafLanguageDriverConfig.newInstance();
- }
- // This class provides to avoid the https://github.com/spring-projects/spring-boot/issues/21626 as workaround.
- @SuppressWarnings("unused")
- private static class MetadataThymeleafLanguageDriverConfig extends ThymeleafLanguageDriverConfig {
- @ConfigurationProperties(CONFIGURATION_PROPERTY_PREFIX + ".thymeleaf.dialect")
- @Override
- public DialectConfig getDialect() {
- return super.getDialect();
- }
- @ConfigurationProperties(CONFIGURATION_PROPERTY_PREFIX + ".thymeleaf.template-file")
- @Override
- public TemplateFileConfig getTemplateFile() {
- return super.getTemplateFile();
- }
- }
- }
- }
|