1. 属性(properties)

既可以引用外部properties文件,也可以在properties元素的子元素中设置。

  1. <properties resource="jdbc/jdbc.properties">
  2. <property name="username" value="dev_user"/>
  3. <property name="password" value="F2Fa3!33TYyg"/>
  4. </properties

设置好的属性可以在整个配置文件中用来替换需要动态配置的属性值。比如:

  1. <dataSource type="POOLED">
  2. <property name="driver" value="${jdbc.driverClassName}"/>
  3. <property name="url" value="${jdbc.url}"/>
  4. <property name="username" value="${jdbc.username}"/>
  5. <property name="password" value="${jdbc.password}"/>
  6. </dataSource>

1.1 属性的优先级

属性加载顺序:

  1. properties元素中设置的属性
  2. resource执行的配置文件中的属性

如果出现重名属性,则覆盖优先级为:resource>properties元素中设置的属性。

1.2 属性的默认值

可以为占位符指定一个默认值,,例如:

  1. <dataSource type="POOLED">
  2. <!-- ... -->
  3. <property name="username" value="${username:ut_user}"/> <!-- 如果属性 'username' 没有被配置,'username' 属性的值将为 'ut_user' -->
  4. </dataSource>

这个特性默认是关闭的。要启用这个特性,需要添加一个特定的属性来开启这个特性:

  1. <properties resource="jdbc/jdbc.properties">
  2. <!-- ... -->
  3. <property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/> <!-- 启用默认值特性 -->
  4. </properties>

1.3 修改默认值的分隔符

  1. <properties resource="jdbc/jdbc.properties">
  2. <!-- ... -->
  3. <property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="?:"/> <!-- 修改默认值的分隔符 -->
  4. </properties>
  1. <dataSource type="POOLED">
  2. <!-- ... -->
  3. <property name="username" value="${db:username?:ut_user}"/>
  4. </dataSource>

2. 设置(settings)

一个配置完整的 settings 元素的示例如下:

  1. <settings>
  2. <!--全局性地开启或关闭所有映射器配置文件中已配置的任何缓存,默认值true-->
  3. <setting name="cacheEnabled" value="true"/>
  4. <setting name="lazyLoadingEnabled" value="true"/>
  5. <setting name="multipleResultSetsEnabled" value="true"/>
  6. <setting name="useColumnLabel" value="true"/>
  7. <setting name="useGeneratedKeys" value="false"/>
  8. <setting name="autoMappingBehavior" value="PARTIAL"/>
  9. <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  10. <setting name="defaultExecutorType" value="SIMPLE"/>
  11. <setting name="defaultStatementTimeout" value="25"/>
  12. <setting name="defaultFetchSize" value="100"/>
  13. <setting name="safeRowBoundsEnabled" value="false"/>
  14. <setting name="mapUnderscoreToCamelCase" value="false"/>
  15. <setting name="localCacheScope" value="SESSION"/>
  16. <setting name="jdbcTypeForNull" value="OTHER"/>
  17. <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
  18. </settings>

3. 类型别名(typeAliases)

为了降低冗余的全限定类名书写

  1. <typeAliases>
  2. <typeAlias alias="Author" type="domain.blog.Author"/>
  3. <typeAlias alias="Blog" type="domain.blog.Blog"/>
  4. <typeAlias alias="Comment" type="domain.blog.Comment"/>
  5. <typeAlias alias="Post" type="domain.blog.Post"/>
  6. <typeAlias alias="Section" type="domain.blog.Section"/>
  7. <typeAlias alias="Tag" type="domain.blog.Tag"/>
  8. </typeAliases>

当这样配置时,Blog 可以用在任何使用 domain.blog.Blog 的地方。

也可以批量给整个包下的javabean添加别名:

  1. <typeAliases>
  2. <package name="domain.blog"/>
  3. </typeAliases>

没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名,比如com.alibaba.taobao.mybatis.entity.User的别名为user

若有注解,则别名为其注解值

  1. @Alias("user")
  2. public class User {
  3. }

4. 类型处理器(typeHandlers)

5. 对象工厂(objectFactory)

6. 插件(plugins)

7. 环境配置(environments)

  1. <environments default="development">
  2. <environment id="development">
  3. <transactionManager type="JDBC">
  4. <property name="..." value="..."/>
  5. </transactionManager>
  6. <dataSource type="POOLED">
  7. <property name="driver" value="${driver}"/>
  8. <property name="url" value="${url}"/>
  9. <property name="username" value="${username}"/>
  10. <property name="password" value="${password}"/>
  11. </dataSource>
  12. </environment>
  13. </environments

默认环境和环境 ID 顾名思义。 环境可以随意命名,但务必保证默认的环境 ID 要匹配其中一个环境 ID。

7.1 事务管理器(transactionManager)

两种类型的事务管理器:JDBC、MANAGED

如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置

7.2 数据源(dataSource)

有三种内建的数据源类型(也就是 type=”[UNPOOLED|POOLED|JNDI]”)

unpooled:不使用连接池

pooled:使用连接池

jndi

7.2.1 自定义数据源

实现接口org.apache.ibatis.datasource.DataSourceFactory

  1. public interface DataSourceFactory {
  2. void setProperties(Properties props);
  3. DataSource getDataSource();
  4. }

8. 数据库厂商标识(databaseIdProvider)

支持多数据库厂商

  1. <databaseIdProvider type="DB_VENDOR">
  2. <property name="SQL Server" value="sqlserver"/>
  3. <property name="DB2" value="db2"/>
  4. <property name="Oracle" value="oracle" />
  5. </databaseIdProvider>

9. 映射器(mappers)

告诉 MyBatis 到哪里去找映射文件

  1. <!-- 使用相对于类路径的资源引用 -->
  2. <mappers>
  3. <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  4. <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
  5. <mapper resource="org/mybatis/builder/PostMapper.xml"/>
  6. </mappers>
  1. <!-- 使用映射器接口实现类的完全限定类名 -->
  2. <mappers>
  3. <mapper class="org.mybatis.builder.AuthorMapper"/>
  4. <mapper class="org.mybatis.builder.BlogMapper"/>
  5. <mapper class="org.mybatis.builder.PostMapper"/>
  6. </mappers>
  1. <!-- 将包内的映射器接口实现全部注册为映射器 -->
  2. <mappers>
  3. <package name="org.mybatis.builder"/>
  4. </mappers>