主要元素
在MyBatis的核心配置文件中,<configuration>元素是配置文件的根元素,其他元素都要在根元素内进行配置。在进行配置时必须按照<properties>、<settings>、<typeAliases>、<typeHandlers>、<objectFactory>、<plugins>、<environments>、<databaseIdProvider>、<mappers>的顺序进行配置,否则在解析配置文件时会出错。
-
<properties>
<properties\>是一个配置属性的元素,该元素通常用于将内部的配 置外在化,即通过外部的配置文件来动态的替换内部定义的属性。 例如将数据库的连接等属性通过外部化到properties文件。然后通过 <properties\>属性引入。 假设有一个数据库配置文件db.properties如下: jdbc.driver = com.mysql.jdbc.Driver jdbc.url = jdbc:mysql://localhost:3306/mybatis jdbc.username = root jdbc.password = 5678943 在MyBatis配置文件中使用properties元素引入db.properties文件: <properties resource="db.properties"/> 使用db.properties中的属性: ${jdbc.driver} 除了使用外部的properties文件来指定配置的值之外,还可以使用 <porperties\>的子元素<property\>来指定值,或者在Java代码中来 动态的配置值。
-
<settings>
<settings\>元素主要用于改变MyBatis运行时的一些行为,例如开启二级 缓存、开启延迟加载等。通常情况下不需要配置该属性的内容,保持默 认值即可。但是在一些特殊情况下,了解该属性的一些配置还是有必要 的。 <settings\>的常见配置如下:
设置参数 | 描述 | 有效值 | 默认值 |
---|---|---|---|
cacheEnable | 该配置影响所有映射器中配置的缓存全局开关 | true|false | false |
lazyLoadingEnabled | 延迟加载的全局开关。开启时,所有关联对象都会延迟加载。特定的关联关系中可以通过fatchType属性来覆盖该项的开关状态 | true|false | false |
aggressiveLazyLoading | 关联对象属性的延迟加载开关。当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性都按需加载 | true|false | true |
multipleResultSetsEnable | 是否允许单一语句返回多结果集(需要兼容驱动) | true|false | true |
useGeneratedKeys | 允许JDBC支持自动生成主键,需要驱动兼容。如果设为true,则这个设置强制使用自动生成主键,尽管一些驱动不兼容但仍可正常工作 | true|false | false |
autoMappingBehavior | 指定MyBatis应如何自动映射列到字段或者属性。NONE表示取消自动映射;PARTIAL只会自动映射没有定义的嵌套结果映射的结果集;FULL会自动映射任意复杂的结果集(无论是否嵌套) | NONE、PARTIAL、FULL | PARTIAL |
defaultExecutorType | 配置默认的执行器。SIMPLE就是普通的执行器;REUSE执行器会重用预处理语句(prepared statements);BATCH执行器将将重用语句并执行批量更新 | SIMPLE、REUSE、BATCH | SIMPLE |
defaultStatementTimeout | 设置超时时间,他决定驱动等待数据库相应的秒数。当没有设置的时候,他取得就是驱动默认时间 | 任何整数 | 没有设置 |
mapUnderscoreToCamelCase | 是否开启驼峰命名规则映射(如果取值为false,必须pojo的属性名与数据库中的列名对应) | true|false | false |
jdbcTypeForNull | 当没有为参数提供特定的JDBC类型时,为空值指定JDBC类型。某些驱动需要制定列的JDBC参数类型,多数情况直接使用一般类型即可,比如NULL、VARCHAR、OTHER | NULL、VARCHAR、OTHER | OTHER |
-
<typeAliases>
<typeAliases>元素用于为配置文件中的Java类型设置一个简短的名字,即设置别名。 使用<typeAliases>定义别名的方法如下: <typeAlases> <typealias alias="user" type="com.mfs.entity.User" > </typeAliases> 除了一个类一个类的定义别名之外,还可以通过扫描包的方式为包中所 有的类添加首字母小写的非限定类名作为他的别名: <typeAliases> <package name="com.mfs.entity"/> <typeAliases> 除此之外,还可以使用注解@Alias(value="user")
-
<typeHandlers>
MyBatis在预处理语句(PreparedStatement)中设置一个参数,或者 从结果集(ResultSet)中取出一个值时,都会用其框架内部注册了的 typeHandler(类型处理器)进行相关处理。typeHandler的作用就是 将预处理语句中传入的参数从javaType转换为jdbcType,或者将结果 集的jdbcType转换为javaType。 MyBatis对于Java中常用的数据类型都已经定义了默认的 typeHandler,这些一般就能够满足日常需要。但如果默认的 typeHandler不能满足我们的需要的时候我们就可以定义自己 typeHandler。 自定义typeHandler需要两部: 1、实现TypeHandler接口或者继承BaseTypeHandler类。 2、使用<typeHandlers>元素注册typeHandler <typeHandlers> <typeHandler handler="com.mfs.handler.MyTypeHandler" /> </typeHandlers> 或者注册整个包中的typeHandler <typeHandlers> <package name="com.mfs.handler"/> </typeHandlers>
-
objectFactory
MyBatis每次创建结果对象的新实例时,都会使用一个对象工厂 (ObjectFactory)实例来创建。MyBatis中默认ObjectFactory的作用 就是实例化目标类,它既可以通过默认的构造方法实例化,也可以在参 数映射存在的时候通过参数构造方法创建。 通常情况下使用DefaultObjectFactory就可以,如果有特殊需求可以 通过实现ObjectFactory接口或者继承DefaultObjectFactory类自定义 ObjectFactory。然后在使用<objectFactory>来配置: <objectFactory type="com.mfs.factory.MyObjectFactory"> <property name="name" value="MyObjectFactory"/> </objectFactory>
-
<plugins>
MyBatis允许在已映射语句执行过程中的某一点进行拦截调用,这种 拦截调用是通过插件来完成的。
-
<environments>
在配置文件中<encironments>元素用于对环境进行配置。MyBatis的环 境配置实际上就是对数据源的配置,我们可以通过<environment>子元素 配置多种数据源,即配置多种数据库。
<environments default="mysql"> <!-- default指定默认的数据库环境 -->
<environment id="mysql"> <!-- 数据库环境的id -->
<!-- type指定事务管理的类型,可以指定为JDBC或者MANAGED两种 -->
<!-- JDBC使用了JDBC的提交和回滚设置,依赖于从数据源得到的连接来管理事务的作用域 -->
<!-- MANAGED从来不会提交或者回滚一个连接 ,而是让容器来管理事务的整个生命周期。
在默认情况下他会关闭连接,但一些容器比不希望这样,为此可以将closeConnection属性设置为false来阻止它默认的关闭行为-->
<transactionManager type="JDBC"></transactionManager>
<!-- MyBatis框架提供了UNPOOLED、POOLED和JNDI三种数据源类型 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="1232434"/>
</dataSource>
</environment>
</environments>
数据源类型配置为UNPOOLED类型时,在每次请求时都会打开和关闭连接。他对性能没有要求的简单应用是一个不错的选择。
数据源配置为POOLED,此数据源利用池的概念将JDBC连接对象组织起来,避免了在创建新的连接实例所需要的初始化和认证的时间。配置词类型的数据源时还可以配置更多的属性。
属性 | 说明 |
---|---|
poolMaximumActiveConnections | 在任意时间可以存在的连接数量,默认值10 |
poolMaximumCheckoutTime | 任意时间可能存在的空闲连接数 |
poolMaximumCheckoutTime | 在强制返回之前,池中连接被检出时间,默认值:20000,即20秒 |
poolTimeToWait | 如果获取链接花费的时间较长,他会给链接池打印状态日志并重新尝试获取一个连接,默认值20000毫秒 |
poolPingQuery | 发送到数据库的侦测查询,用于检验连接是否处于正常工作秩序中。默认是“NO PING QUERY SET”,这会倒是多数数据库驱动失败时带有一定的错误消息。 |
poolPingEnable | 是否用侦测查询。默认为false |
poolPingConnectionsNotUsedFor | 配置poolPingQuery的使用频度,默认值:0 |
JNDI数据源可以在EJB或者应用服务等容器中使用。容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。
-
<mappers>
用于指定映射文件的位置。可以使用如下四种方式配置 1、使用类路径引入 <mappers> <mapper resource="com.mfs.mapper.UserMapper.xml"/> <mappers> 2、使用本地文件路径引入 <mappers> <mapper url="file:///D:/com/mfs/mapper/UserMapper.xml"/> <mappers> 3、使用接口类引入 <mappers> <mapper class="com.mfs.mapper.UserMapper"/> <mappers> 4、使用包名引入 <mappers> <package name="com.mfs.mapper"/> <mappers>