MyBatis配置文件(mybatis-config.xml)

  下面介绍 XML 配置文件中的重要元素(标签)。

  configuration 元素是整个 XML 配置文件的根节点,其角色就相当于是 MyBatis 的总管,MyBatis 所有的配置信息都会存放在它里面。

  properties标签

  properties 标签可以通过 resource 属性指定外部 properties 文件(database.properties),也可以通过 properties 子元素配置。

  settings标签

  settings 标签用于配置 MyBatis 的运行时行为,它能深刻的影响 MyBatis 的底层运行,一般不需要大量配置,大部分情况下使用其默认值即可。

  settings 的配置项很多,但是真正用到的不会太多,我们把常用的配置项研究清楚就可以了。settings 配置项说明如下表所示(表中红色字体的配置项为常用配置项)。

配置项

作用

配置选项

默认值

cacheEnabled

该配置影响所有映射器中配置缓存的全局开关

true|false

true

lazyLoadingEnabled

延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。在特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态

true|false

false

aggressiveLazyLoading

当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性将会按需加载

true|false

版本3.4.1 (不包含)

之前默认值为 true,之后为 false

multipleResultSetsEnabled

是否允许单一语句返回多结果集(需要兼容驱动)

true|false

true

useColumnLabel

使用列标签代替列名。不同的驱动会有不同的表现,具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果

true|false

true

useGeneratedKeys

允许JDBC 支持自动生成主键,需要驱动兼容。如果设置为 true,则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby)

true|false

false

autoMappingBehavior

指定 MyBatis 应如何自动映射列到字段或属性。

NONE 表示取消自动映射。PARTIAL 表示只会自动映射,没有定义嵌套结果集和映射结果集。FULL 会自动映射任意复杂的结果集(无论是否嵌套)

NONE、PARTIAL、FULL

PARTIAL

autoMappingUnkno wnColumnBehavior

指定自动映射当中未知列(或未知属性类型)时的行为。 默认是不处理,只有当日志级别达到 WARN 级别或者以下,才会显示相关日志,如果处理失败会抛出 SqlSessionException 异常

NONE、WARNING、FAILING

NONE

defaultExecutorType

配置默认的执行器。SIMPLE 是普通的执行器;REUSE 会重用预处理语句(prepared statements);BATCH 执行器将重用语句并执行批量更新

SIMPLE、REUSE、BATCH

SIMPLE

defaultStatementTimeout

设置超时时间,它决定驱动等待数据库响应的秒数

任何正整数

Not Set (null)

defaultFetchSize

设置数据库驱动程序默认返回的条数限制,此参数可以重新设置

任何正整数

Not Set (null)

safeRowBoundsEnabled

允许在嵌套语句中使用分页(RowBounds)。如果允许,设置 false

true|false

false

safeResultHandlerEnabled

允许在嵌套语句中使用分页(ResultHandler)。如果允许,设置false

true|false

true

mapUnderscoreToCamelCase

是否开启自动驼峰命名规则映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射

true|false

false

localCacheScope

MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速联复嵌套査询。

默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlScssion 的不同调用将不会共享数据

SESSION|STATEMENT

SESSION

jdbcTypeForNull

当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER

NULL、VARCHAR、OTHER

OTHER

lazyLoadTriggerMethods

指定哪个对象的方法触发一次延迟加载

equals、clone、hashCode、toString

defaultScriptingLanguage

指定动态 SQL 生成的默认语言

org.apache.ibatis

.script.ing.xmltags.XMLDynamicLanguageDriver

callSettersOnNulls

指定当结果集中值为 null 时,是否调用映射对象的 setter(map 对象时为 put)方法,这对于 Map.kcySet() 依赖或 null 值初始化时是有用的。注意,基本类型(int、boolean 等)不能设置成 null

true|false

false

logPrefix

指定 MyBatis 增加到日志名称的前缀

任何字符串

Not set

loglmpl

指定 MyBatis 所用日志的具体实现,未指定时将自动査找

SLF4J|LOG4J|LOG4J2|JDK_LOGGING

|COMMONS_LOGGING|ST DOUT_LOGGING|NO_LOGGING

Not set

proxyFactory

指定 MyBatis 创建具有延迟加栽能力的对象所用到的代理工具

CGLIB|JAVASSIST

JAVASSIST (MyBatis 版本为 3.3 及以上的)

vfsImpl

指定 VFS 的实现类

提供 VFS 类的全限定名,如果存在多个,可以使用逗号分隔

Not set

useActualParamName

允许用方法参数中声明的实际名称引用参数。要使用此功能,项目必须被编译为 Java 8 参数的选择。(从版本 3.4.1 开始可以使用)

true|false

true

  typeAliases标签

  为了不在任何地方都指定类的全限定名,我们可以使用 typeAliases 标签定义一个别名。

  typeHandlers标签

  typeHandlers 主要将获取的值合理地转化为 Java 类型。在 typeHandler 中,分为 jdbcType 和 javaType,其中 jdbcType 用于定义数据库类型,而 javaType 用于定义 Java 类型,typeHandler 的作用就是承担 jdbcType 和 javaType 之间的相互转换。

  MyBatis 支持自定义处理类型,在自定义处理类型时,需要实现 org.apache.ibatis.type.TypeHandler 接口或继承 org.apache.ibatis.type.BaseTypeHandle 类。详细可参考官网:#typeHandlers

  environments标签

  在 environments 标签中,可以配置 MyBatis 的多套运行环境,将 SQL 映射到多个不同的数据库上。

  environment 是 environments 的子标签,用来配置 MyBatis 的一套运行环境,需指定运行环境 ID、事务管理、数据源配置等相关信息。

  我们可以通过配置多个 environment 标签来连接多个数据库,需要注意的是必须指定其中一个为默认运行环境(通过default指定)。

  environment 标签提供了两个子标签,即 transactionManager 和 dataSource。

  transactionManager标签

  MyBatis 支持两个事务管理器,即 JDBC 和 MANAGED。

  如果使用 JDBC 类型的事务管理器,则应用程序服务器负责事务管理操作,例如提交、回滚等。如果使用 MANAGED 类型的事务管理器,则应用程序服务器负责管理连接生命周期。

  dataSource标签

  用于配置数据库的连接属性,例如要连接的数据库的驱动程序名称、URL、用户名和密码等。

  dataSource 中的 type 属性用于指定数据源类型,有以下 3 种类型。

  1)UNPOOLED

  UNPOOLED 没有数据库连接池,效率低下。MyBatis 需要打开和关闭每个数据库操作的连接,它有点慢,通常应用于简单的应用程序。

  2)POOLED

  对于 POOLED 数据源类型,MyBatis 将维护一个数据库连接池。并且对于每个数据库的操作,MyBatis 都会使用连接池中的连接,并在操作完成后将它们返回到池中。减少了创建新连接所需的初始连接和身份验证时间。

  3)JNDI

  对于 JNDI 的数据源类型,MyBatis 将从 JNDI 数据源中获取连接。

  mappers标签

  mappers 标签用于指定 MyBatis SQL 映射文件的路径。

  mapper 是 mappers 的子标签,mapper 中的 resource 属性用于指定 SQL 映射文件的路径(类资源路径)

开课吧广场-人才学习交流平台