持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
通过第一篇的学习,对 MyBatis 项目架构有了初步的了解,这次就来具体了解一下 MyBatis 中的全局配置,并学习相关配置的定义方式。
1. MyBatis 全局配置文件
1.1 mybatis-config.xml 介绍
MyBatis 全局配置文件是 MyBatis 最主要的配置,初始化时会根据相应的配置信息来创建 SqlSessionFactory 对象,并最终实现数据库连接对象的创建。
MyBatis 全局配置文件的名称不固定,在 MyBatis 中默认使用 mybatis-config.xml 作为主配置文件的名称,如果没有指定自定义的文件名和路径,MyBatis 在初始化时会到 classpath 目录下寻找 mybatis-config.xml 文件进行解析并加载。
1.2 mybatis-config.xml 内容结构
mybatis-config.xml 第一行是 XML 声明,指定了编码字符集,之后的内容中可以定义 MyBatis 支持自定义的属性,使用 XML 标签的格式进行完成声明定义。
主配置文件中可以定义的内容有:
-
configuration,Mybatis 配置文件的根元素标签
-
properties,自定义属性变量(name)、引入资源文件(resource)
-
setting,定义 MyBatis 内部配置的开启或关闭
-
typeAlias,项目中类的全限定名比较长,可以使用该标签为 Java 类指定别名,便于使用
-
plugins,MyBatis 插件配置,可以配置自定义拦截器
-
environments,管理数据库连接,其中可有多个 environment 标签,但是 default 只能根据 id 指定一个
-
environment,配置 Mybatis 连接的数据库的环境
-
transationManager, MuBatis 事务管理配置
-
datasource,配置 MyBatis 数据源
-
-
-
mappers,标签用来声明定义的映射文件(*Mapper.xml)
-
值得注意的是,在 mybatis-config.xml 主配置文件中,相关属性的定义需要满足以上顺序,否则编译时可能会报错。
2. 配置内容详情
MyBatis 的主配置文件中,所有的配置内容都约定在一对 configuration 标签中,configuration 元素作为整个 XML 配置文件的根节点。
2.1 properties
properties 属性标签,可以在其中使用 property 标签自定义内容变量,也可以读取其他 .properties 文件中华定义的属性,使用 ${keyName} 表达式来引用变量代表的值。
<!-- 定义变量,可以使用 ${driver} 来代表 com.mysql.jdbc.Driver 值 -->
<properties>
<property name="driver" value="com.mysql.jdbc.Driver" />
</properties>
<!-- 引入外部文件资源,可以直接获取文件中内容,也是使用 ${[key]} 的方式获取对应变量值 -->
<properties>
resource="mybatis.properties"
</properties>
2.2 setting
settings 标签用于配置 MyBatis 的运行时行为,会影响 MyBatis 的底层运行配置,一般不只需要使用默认值即可。 如果想要自定义相关内容,则可以使用 setting 标签对来设置如下属性等对应值:
- cacheEnabled,设置开启二级缓存,默认为 true
- lazyLoadingEnabled,设置开启懒加载,默认为 false
- mapUnderscoreToCamelCase,设置开启驼峰转下划线命名,默认为 false
- logImpl,设置日志提供商,默认为不指定,可以指定 LOG4J 等日志框架
- 其他配置等
2.3 typeAlias
typeAlias 标签对可以为 Java 类的全限定名指定别名,使用别名操作可以更加方便快捷。
<!-- 使用时可以直接使用 User 代表 com.shone.manage.entity.User -->
<typeAliases>
<typeAlias type="com.shone.manage.entity.User" alias="User"></typeAlias>
</typeAliases>
<!-- 指定整个包下的所有 Java 类都可以使用首字母小写后的名称作为别名,如 user -->
<typeAliases>
<package name="com.shone.manage.entity"/>
</typeAliases>
2.4 plugins
plugins 是 MyBatis 中的插件配置标签,而 MyBatis 的插件实际上就是拦截器,通过配置拦截器可以拦截 MyBatis 的执行流程,并在特定的位置上提供扩展,典型的 MyBatis 扩展(拦截器)就是分页插件 PageHelper。
MyBaits 中提供自定义扩展的位置有:
- Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
- StatementHandler (prepare, parameterize, batch, update, query)
- ParameterHandler (getParameterObject, setParameters)
- ResultSetHandler (handleResultSets, handleOutputParameters)
2.5 environments
environments 标签主要是用来管理 environment 并指定默认使用的 environment 配置,通过 environments 标签可以在 MyBatis 配置文件中维护多个数据库配置信息。
environment 标签代表环境信息,通常可以用来为 MyBatis 的 DataSource 属性赋值,即 MyBatis 连接数据库的必要属性信息,其中还可以配置如下子标签:
-
transactionManager,事务管理标签
-
datasource,数据源管理标签
<environments default="development">
<environment id="development">
<!-- 设置事务管理为 JDBC 原生方式,若是 MANAGED 代表交给 Spring 管理 -->
<transactionManager type="JDBC" />
<!-- 使用数据库连接池 -->
<dataSource type="POOLED">
<!-- 数据库连接相关属性,此处默认已在 properties 标签中定义 -->
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
2.6 mappers
mappers 标签用于指定 MyBatis SQL 映射文件的路径,其中可以包含 mapper 标签,mapper 中的 resource 属性用于指定 SQL 映射文件的路径(类资源路径)。
<!-- 引入映射文件 -->
<mappers>
<!-- ①以报为单位引入,需要保证 mapper 接口与对应的 xml 文件名称一致且包一致 -->
<package name="com.shone.manage.mapper"/>
<!-- ②以 mapper 文件为单位引入,指定文件路径信息 -->
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
3. 总结
MyBatis 中提供了使用 XML 文件来定义主配置文件的方式,并约定使用 classpath 路径下的 mybatis-config.xml 来作为默认配置文件进行初始化解析。
初始化过程中,MyBatis 中的 XMLConfigBuilder 解析器会根据对应的 XML 资源解析得到对应的 Configuration 对象,并在之后的初始化过程中根据定义配置来创建合适的流程对象。