Mybatis源码分析[05.Configuration]
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,Mybatis的配置类public class Configuration { //环境 protected Environment environment; //---------节点----
千家信息网最后更新 2025年12月02日Mybatis源码分析[05.Configuration]
Mybatis的配置类
public class Configuration { //环境 protected Environment environment; //---------节点------- protected boolean safeRowBoundsEnabled = false; protected boolean safeResultHandlerEnabled = true; protected boolean mapUnderscoreToCamelCase = false; protected boolean aggressiveLazyLoading = true; protected boolean multipleResultSetsEnabled = true; protected boolean useGeneratedKeys = false; protected boolean useColumnLabel = true; //默认启用缓存 protected boolean cacheEnabled = true; protected boolean callSettersOnNulls = false; protected String logPrefix; protected Class extends Log> logImpl; protected LocalCacheScope localCacheScope = LocalCacheScope.SESSION; protected JdbcType jdbcTypeForNull = JdbcType.OTHER; protected Set lazyLoadTriggerMethods = new HashSet(Arrays.asList(new String[] { "equals", "clone", "hashCode", "toString" })); protected Integer defaultStatementTimeout; //默认为简单执行器 protected ExecutorType defaultExecutorType = ExecutorType.SIMPLE; protected AutoMappingBehavior autoMappingBehavior = AutoMappingBehavior.PARTIAL; //---------节点------- protected Properties variables = new Properties(); //对象工厂和对象包装器工厂 protected ObjectFactory objectFactory = new DefaultObjectFactory(); protected ObjectWrapperFactory objectWrapperFactory = new DefaultObjectWrapperFactory(); //映射注册机 protected MapperRegistry mapperRegistry = new MapperRegistry(this); //默认禁用延迟加载 protected boolean lazyLoadingEnabled = false; protected ProxyFactory proxyFactory = new JavassistProxyFactory(); // #224 Using internal Javassist instead of OGNL protected String databaseId; /** * Configuration factory class. * Used to create Configuration for loading deserialized unread properties. * * @see Issue 300 (google code) */ protected Class> configurationFactory; protected final InterceptorChain interceptorChain = new InterceptorChain(); //类型处理器注册机 protected final TypeHandlerRegistry typeHandlerRegistry = new TypeHandlerRegistry(); //类型别名注册机 protected final TypeAliasRegistry typeAliasRegistry = new TypeAliasRegistry(); protected final LanguageDriverRegistry languageRegistry = new LanguageDriverRegistry(); //映射的语句,存在Map里 protected final Map mappedStatements = new StrictMap("Mapped Statements collection"); //缓存,存在Map里 protected final Map caches = new StrictMap("Caches collection"); //结果映射,存在Map里 protected final Map resultMaps = new StrictMap("Result Maps collection"); protected final Map parameterMaps = new StrictMap("Parameter Maps collection"); protected final Map keyGenerators = new StrictMap("Key Generators collection"); protected final Set loadedResources = new HashSet(); protected final Map sqlFragments = new StrictMap("XML fragments parsed from previous mappers"); //不完整的SQL语句 protected final Collection incompleteStatements = new LinkedList(); protected final Collection incompleteCacheRefs = new LinkedList(); protected final Collection incompleteResultMaps = new LinkedList(); protected final Collection incompleteMethods = new LinkedList(); /* * A map holds cache-ref relationship. The key is the namespace that * references a cache bound to another namespace and the value is the * namespace which the actual cache is bound to. */ protected final Map cacheRefMap = new HashMap(); public Configuration(Environment environment) { this(); this.environment = environment; } public Configuration() { //注册更多的类型别名 typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class); typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class); typeAliasRegistry.registerAlias("JNDI", JndiDataSourceFactory.class); typeAliasRegistry.registerAlias("POOLED", PooledDataSourceFactory.class); typeAliasRegistry.registerAlias("UNPOOLED", UnpooledDataSourceFactory.class); typeAliasRegistry.registerAlias("PERPETUAL", PerpetualCache.class); typeAliasRegistry.registerAlias("FIFO", FifoCache.class); typeAliasRegistry.registerAlias("LRU", LruCache.class); typeAliasRegistry.registerAlias("SOFT", SoftCache.class); typeAliasRegistry.registerAlias("WEAK", WeakCache.class); typeAliasRegistry.registerAlias("DB_VENDOR", VendorDatabaseIdProvider.class); typeAliasRegistry.registerAlias("XML", XMLLanguageDriver.class); typeAliasRegistry.registerAlias("RAW", RawLanguageDriver.class); typeAliasRegistry.registerAlias("SLF4J", Slf4jImpl.class); typeAliasRegistry.registerAlias("COMMONS_LOGGING", JakartaCommonsLoggingImpl.class); typeAliasRegistry.registerAlias("LOG4J", Log4jImpl.class); typeAliasRegistry.registerAlias("LOG4J2", Log4j2Impl.class); typeAliasRegistry.registerAlias("JDK_LOGGING", Jdk14LoggingImpl.class); typeAliasRegistry.registerAlias("STDOUT_LOGGING", StdOutImpl.class); typeAliasRegistry.registerAlias("NO_LOGGING", NoLoggingImpl.class); typeAliasRegistry.registerAlias("CGLIB", CglibProxyFactory.class); typeAliasRegistry.registerAlias("JAVASSIST", JavassistProxyFactory.class); languageRegistry.setDefaultDriverClass(XMLLanguageDriver.class); languageRegistry.register(RawLanguageDriver.class); }} Configuration类具有产生执行器的功能
//产生执行器 public Executor newExecutor(Transaction transaction, ExecutorType executorType) { executorType = executorType == null ? defaultExecutorType : executorType; executorType = executorType == null ? ExecutorType.SIMPLE : executorType; Executor executor; //然后就是简单的3个分支,产生3种执行器BatchExecutor/ReuseExecutor/SimpleExecutor if (ExecutorType.BATCH == executorType) { executor = new BatchExecutor(this, transaction); } else if (ExecutorType.REUSE == executorType) { executor = new ReuseExecutor(this, transaction); } else { executor = new SimpleExecutor(this, transaction); } //如果要求缓存,生成另一种CachingExecutor(默认就是有缓存),装饰者模式,所以默认都是返回CachingExecutor if (cacheEnabled) { executor = new CachingExecutor(executor); } //此处调用插件,通过插件可以改变Executor行为 executor = (Executor) interceptorChain.pluginAll(executor); return executor; }
缓存
执行器
注册机
类型
别名
对象
就是
工厂
插件
节点
语句
分支
功能
处理器
更多
模式
环境
结果
行为
包装
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发质量评估系统
安卓数据库导出为excel
四川白酒贸易额数据库
全程电子化服务器异常404
数据库结构同步工具
数据库的建设与使用
手机建立vpn服务器
厦门手机应用软件开发报价单
南通市海安市软件开发公司
居民网络安全
三门峡网络安全培训会
数据库插入数据时对象无效
一份网络安全秘籍
图书馆 法信数据库
富途集团软件开发
网络安全字体标志图大全
gpu服务器租借推荐
湖北资金管理软件开发公司
网络技术哪种最好
海口智慧安全文化展厅软件开发
湖北通信软件开发推广
白沟软件开发培训
个性化网络技术是什么
韩城市第七届网络安全宣传周
软件开发转技术还是转管理好
网红直播平台背后的网络安全
60斯坦索姆数据库
网络技术小组名字
人间地狱哪个服务器好玩
软件开发竞争性谈判会议纪要