启用之后, 可以自己实现驼峰效果。
3.3.6.4 解析过程 private void objectWrapperFactoryElement(XNode context) throws Exception { if (context != null) { // 获取 <objectWrapperFactory> 的type属性 String type = context.getStringAttribute("type"); // 通过反射生成 ObjectWrapperFactory 对象 ObjectWrapperFactory factory = (ObjectWrapperFactory) resolveClass(type).newInstance(); // 将 ObjectWrapperFactory 对象设置到 Configuration 对象中 configuration.setObjectWrapperFactory(factory); } } 3.3.7 reflectorFactory 相关属性 3.3.7.1 成员变量 protected ObjectWrapperFactory objectWrapperFactory = new DefaultObjectWrapperFactory(); 3.3.7.2 对应 XML 节点:<reflectorFactory> <reflectorFactory type=""/> 3.3.7.3 作用可以自己定义反射类
3.3.7.4 解析过程 private void reflectorFactoryElement(XNode context) throws Exception { if (context != null) { // 获取 <objectWrapperFactory> 的type属性 String type = context.getStringAttribute("type"); // 通过反射生成 ReflectorFactory 对象 ReflectorFactory factory = (ReflectorFactory) resolveClass(type).newInstance(); // 将 ReflectorFactory 对象设置到 Configuration 对象中 configuration.setReflectorFactory(factory); } } 3.3.8 environments 相关属性 3.3.8.1 成员变量 protected Environment environment;Enviroment 中, 含有id, 事务, 数据源:
public final class Environment { private final String id; private final TransactionFactory transactionFactory; private final DataSource dataSource; ... } 3.3.8.2 对应 XML 节点:<environments> <environments default="development"> <environment> <transactionManager type="JDBC"> <property value=""/> </transactionManager> <dataSource type="POOLED"> <property value="${mysql.driver}"/> <property value="${mysql.url}"/> <property value="${mysql.username}"/> <property value="${mysql.password}"/> </dataSource> </environment> </environments>Environment主要用于配置数据源和事务信息。Mybatis支持多环境设置,可以为开发,测试,生产使用不同的配置。
3.3.8.3 作用就是设置数据库连接的环境, 需要配置事务管理器和数据源来构造相应的对象。
既然environments可以配置多个environment, 那么为什么成员变量的类型不是List?
答: 多个环境,每个 SqlSessionFactory 实例只能选择其一
3.3.8.4 解析过程 private void environmentsElement(XNode context) throws Exception { if (context != null) { // 未指定, 则使用 default 属性指定的 <environment> if (environment == null) { environment = context.getStringAttribute("default"); } // 遍历所有的 <environment> 子节点 for (XNode child : context.getChildren()) { String id = child.getStringAttribute("id"); // 只有 id 与 XMLConfigBuilder 的 environment 匹配上才会进行解析里面的内容 if (isSpecifiedEnvironment(id)) { // 创建 TransactionFactory 对象 TransactionFactory txFactory = transactionManagerElement(child.evalNode("transactionManager")); // 创建 DataSourceFactory 对象, 并以之创建 DataSource 对象 DataSourceFactory dsFactory = dataSourceElement(child.evalNode("dataSource")); DataSource dataSource = dsFactory.getDataSource(); // 创建 Environment.Builder 对象, 将以上产生的对象对应设置到该对象中 Environment.Builder environmentBuilder = new Environment.Builder(id) .transactionFactory(txFactory) .dataSource(dataSource); // environmentBuilder.build()创建 Environment 对象, 并设置到 Configuration 对象对应的成员变量中 configuration.setEnvironment(environmentBuilder.build()); } } } } 3.3.9 databaseIdProvider 相关属性 3.3.9.1 成员变量 protected String databaseId; 3.3.9.2 对应 XML 节点:<databaseIdProvider> <databaseIdProvider type="DB_VENDOR" /> 3.3.9.3 作用