MyBatis的配置文件包括了会深深影响MyBatis行为的设置和属性信息。配置文档的层级结构如下:
注意:一定要按照层级关系来写标签,不然会报错(比如:将mapper(映射器)写在environments(环境配置前面),就会出错)
实际开发中,习惯将数据源的配置文件信息单独抽取成一个properties文件,该标签可以加载额外配置的properties文件。
properties文件配置:
整个配置文件中用来替换需要动态配置的属性值:
在上面的例子中的driver和url属性将会由jdbc.properties文件中对应的值来替换,这样就为了配置提供了更多的灵活选择。
链接:https://mybatis.org/mybatis-3/zh/configuration.html#settings
一个配置完整的 settings 元素的示例如下:
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项设置的含义、默认值等。
这个标签可以为java类型设置一个缩写名字。他仅用于xml配置,主要为了降低冗余的权限类名。
我们可以使用配置typeAliases,定义别名:
这样我们就可以在resultType下使用我们定义好的别名,而不用使用权限类名的书写。
MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。
注意:尽管可以配置多个环境,但每个SqlSessionFactory实例只能选择一种环境
如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推。
每个数据库对应一个 SqlSessionFactory 实例
为了指定创建哪种环境,只要将它作为可选的参数传递给 SqlSessionFactoryBuilder 即可。可以接受环境配置的两个方法签名是:
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(reader, environment);
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(reader, environment, properties);
如果忽略了环境参数,那么将会加载默认环境,如下所示:
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(reader);
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(reader, properties);
environments元素定义了如何配置环境变量
其中,事务管理器(transactionManager)类型有两种:
其中,数据源(dataSource)类型有三种:
既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。 但首先,我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等。例如:
该标签的作用是加载映射的,加载方式有如一下几种:
使用相对于类路径的资源引用,例如:
<mapper resource="StuMapper.xml"></mapper>
使用完全限定资源定位符(URL),例如:
<mapper url="file:///var/mappers/..."></mapper>
使用映射器接口实现类的完全限定类名,例如:
<mapper class="org.mybatis.builder.AuthorMapper"></mapper>
将包内的映射器接口实现全部注册为映射器,例如:
<package name="org.mybatis.builder"/>