/**
* Copyright (c) 2011-2020, hubin (jobob@qq.com).
* <p>
* 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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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;
import org.apache.ibatis.binding.MapperRegistry;
import org.apache.ibatis.logging.Log;
import org.apache.ibatis.logging.LogFactory;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import com.baomidou.mybatisplus.entity.GlobalConfiguration;
/**
* <p>
* replace default Configuration class
* </p>
* <p>
* Caratacus 2016/9/25 replace mapperRegistry
* </p>
*
* @author hubin
* @Date 2016-01-23
*/
public class MybatisConfiguration extends Configuration {
private static final Log logger = LogFactory.getLog(MybatisConfiguration.class);
/*
* Mapper 注册
*/
public final MybatisMapperRegistry mybatisMapperRegistry = new MybatisMapperRegistry(this);
/**
* 初始化调用
*/
public MybatisConfiguration() {
System.err.println("mybatis-plus init success.");
}
/**
* <p>
* MybatisPlus 加载 SQL 顺序:
* </p>
* 1、加载XML中的SQL<br>
* 2、加载sqlProvider中的SQL<br>
* 3、xmlSql 与 sqlProvider不能包含相同的SQL<br>
* <br>
* 调整后的SQL优先级:xmlSql > sqlProvider > curdSql <br>
*/
@Override
public void addMappedStatement(MappedStatement ms) {
logger.debug("addMappedStatement: " + ms.getId());
if (GlobalConfiguration.isRefresh(ms.getConfiguration())) {
/*
* 支持是否自动刷新 XML 变更内容,开发环境使用【 注:生产环境勿用!】
*/
this.mappedStatements.remove(ms.getId());
} else {
if (this.mappedStatements.containsKey(ms.getId())) {
/*
* 说明已加载了xml中的节点; 忽略mapper中的SqlProvider数据
*/
logger.error("mapper[" + ms.getId() + "] is ignored, because it's exists, maybe from xml file");
return;
}
}
super.addMappedStatement(ms);
}
@Override
public void setDefaultScriptingLanguage(Class<?> driver) {
if (driver == null) {
/* 设置自定义 driver */
driver = MybatisXMLLanguageDriver.class;
}
super.setDefaultScriptingLanguage(driver);
}
@Override
public MapperRegistry getMapperRegistry() {
return mybatisMapperRegistry;
}
@Override
public <T> void addMapper(Class<T> type) {
mybatisMapperRegistry.addMapper(type);
}
@Override
public void addMappers(String packageName, Class<?> superType) {
mybatisMapperRegistry.addMappers(packageName, superType);
}
@Override
public void addMappers(String packageName) {
mybatisMapperRegistry.addMappers(packageName);
}
@Override
public <T> T getMapper(Class<T> type, SqlSession sqlSession) {
return mybatisMapperRegistry.getMapper(type, sqlSession);
}
@Override
public boolean hasMapper(Class<?> type) {
return mybatisMapperRegistry.hasMapper(type);
}
}