MyBatis 配置文件(`mybatis-config.xml`)核心组成部分
1. `<configuration>`(根节点)
- **作用**:所有配置的顶层容器,包含所有子配置项。
- **示例**:
<configuration>
<!-- 其他配置 -->
</configuration>
2. `<properties>`(属性配置)
- **作用**:加载外部属性文件或定义属性,支持动态替换配置值(如 `${key}`)。
- **加载方式**:
- 外部文件:`<properties resource="db.properties"/>` 或 URL。
- 直接定义:`<property name="key" value="value"/>`。
- **示例**:
<properties resource="db.properties">
<property name="jdbc.username" value="root"/>
</properties>
3. `<settings>`(全局行为设置)
- **作用**:控制 MyBatis 核心行为(如缓存、日志、命名规则)。
- **常见设置**:
- `logImpl`:日志实现(如 `SLF4J`、`LOG4J`、`STDOUT_LOGGING`)。
- **示例**:
<settings>
<setting name="logImpl" value="SLF4J"/>
</settings>
4. `<typeAliases>`(类型别名)
- **作用**:为 Java 类定义短别名,简化 Mapper 中类型引用。
- **定义方式**:
- 单独定义:`<typeAlias type="com.example.User" alias="User"/>`。
- 批量扫描:`<package name="com.example.model"/>`。
- **效果**:用别名(如 `User`)替代全限定类名。
5. `<objectFactory>`(对象工厂)
- **作用**:自定义对象实例化逻辑(高级用法,默认无需修改)。
- **示例**:
<objectFactory type="com.example.CustomObjectFactory">
<property name="someProperty" value="100"/>
</objectFactory>
6. `<plugins>`(插件/拦截器)
- **作用**:拦截 MyBatis 核心行为(如分页、SQL 审计)。
- **示例**:自定义插件实现特定功能(如分页插件)。
7. `<environments>`(环境配置)
- **作用**:定义多套数据库环境(开发、测试、生产),支持切换。
- **子节点**:
- `<transactionManager>`:事务管理(`JDBC` 或 `MANAGED`)。
- `<dataSource>`:数据源(`POOLED`、`UNPOOLED`、`JNDI`)。
- **示例**:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/elearning"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
```
8. `<databaseIdProvider>`(多数据库支持)
- **作用**:根据数据库类型(如 MySQL、Oracle)执行不同 SQL。
- **用法**:通过 `databaseId` 在 Mapper 中指定 SQL。
- **示例**:
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
</databaseIdProvider>
<select id="getUser" resultType="User" databaseId="mysql">
SELECT * FROM user
</select>
9. `<mappers>`(映射器注册)
- **作用**:指定 Mapper 接口或 XML 文件,加载 SQL 映射。
- **注册方式**:
- XML 文件:`<mapper resource="com/example/mapper/UserMapper.xml"/>`。
- 接口类:`<mapper class="com.example.mapper.UserMapper"/>`。
- 包扫描:`<package name="com.example.mapper"/>`。
- **示例**:
<mappers>
<package name="com.example.mapper"/>
</mappers>
注意事项:
1. **配置顺序**:必须遵循固定顺序(`properties` → `settings` → `typeAliases` → ... → `mappers`),否则解析报错。
2. **动态属性**:`${key}` 用于引用 `properties` 定义的属性。
3. **环境切换**:通过 `environments` 的 `default` 属性指定默认环境。
4. **Mapper 加载**:确保接口与 XML 文件名和路径一致(若使用接口方式)。