主要元素
在Mybatis核心配置文件中,<configuration>时配置文件的根元素。其元素的的主要配置元素如下
properties元素
<properties>是一个配置属性的元素,该元素通常用于将内部的配置外在化,即通过外部的配置来动态地替换内部定义地属性。
1,创建一个db.properties地配置文件,内容如下:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root
2,之后在配置文件中用properties标签引入这些属性
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"/>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/itheima/mapper/CustomerMapper.xml"/>
</mappers>
</configuration>
settings元素
settings元素主要用于改变MyBatis运行时地行为,例如开启二级缓存、开启延迟加载等
* cacheEnabled:该配置影响所有映射器中配置地缓存全局开关,
*
设置参数 | 描述 | 有效值 | 默认值 |
---|---|---|---|
cacheEnabled | 该配置影响所有映射器中配置地缓存全局开关 | true/false | false |
lazyLoadingEnabled | 延迟加载地全局开关。所以关联对象都会延迟加载。特定关联关系中可以通过设置fetchType属性来覆盖该项地开关设置 | true/false | false |
aggressiveLazyLoading | 关联对象属性地延迟加载开关。当启用时,对任意延迟属的调用会使带有延迟加载属性的对象完整加载;反之,每种属性都会按需加载 | true/false | true |
multipleResultSetsEnabled | 是否允许单一语句返回多结果集(需要兼容驱动) | true/false | true |
useColumnLabel | 使用列标签代替列名。不同的驱动有不同的表现 | true/false | true |
useGeneratedKeys | 允许JDBC支持自动生成主键,需要驱动兼容。如果设置为true,则这个设置强制使用自动生成主键,尽管一些驱动不兼容但仍可以正常工作 | true/false | false |
autoMappingBehavior | 指定MyBatis应如何自动映射到字段或属性。NONE表示取消自动映射;PARTAL只会自动映射没有定义嵌套结果集映射的结果集;FULL会自动映射任意复杂的结果集(物理是否嵌套) | NONE、PAERIAL、FULL | PARIAL |
defaultExecutorType | 配置默认的执行器。SIMPLE就是普通的执行器;REUSE执行器会重用预处理语句(prepared statements);BATCH执行器将重用语句并执行批量更新 | SIMPLE、REUSE、BATCH | SIMPLE |
defaultStatementTimeout | 设置超时间、它决定驱动等待数据库响应的秒数。当没有设置的时候,它取的就是驱动默认时间 | 任何正整数 | 没有设置 |
mapUnderscoreToCamelCase | 是否开启自动驼峰命名规则映射 | true/false | false |
jdbcTypeForNull | 当没有为参数提供特定的JDBC类型时,为空值指定JDBC类型。某些驱动需要指定列的JDBC类型,多数情况直接用一般类型即可,比如NULL、VARCHARhuoOTHER | NULL、VARCHAR、OTHER | OTHER |
配置使用如下:
<settings>
<setting name="cacheEnabled" value="true" />
<setting name="lazyLoadingEnabled" value="true" />
</settings>
typeAliases
该元素用于为配置文件中的Java类型设置一个简短的名字,即设置别名。
使用方法如下:
<typeAliases>
<typeAlias alias="user" type="com.itheima.po.User />
</ltypeAliases>
除了这个处理方法外,还可以通过扫描包来自定义别名
<typeAliases>
<package name="com.itheima.po"/>
</typeAliases>
以上MyBatis会将所有com.itheima.po包中的POJO类以首字母小写的非限定类名来作为它的别名。但是如果在类中使用了注解,则别名以注解为准。
@Alias(value="user")
public class User {
...
}
MyBatis还默认了许多常见的java类型提供了相应的类型别名
别名 | 映射类型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
object | Object |
map | Map |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
collection | Collection |
iterator | Iterator |
typeHandler
MyBatis在预处理语句(PreparedStatement)中设置一个参数或者从结果集(ResultSet)中取出一个值时,都会用其框架内注册了的typeHandler(类型处理器)进行相关处理。typeHandler的作用就是将预处理语句中传入的参数从javaType(java类型)转换为jdbcType(JDBC类型),或者从数据库取出结果时将jdbcType转换为javaType。
objectFactory
MyBatis框架每次创建结果对象的新实例时,都会使用一个对象工厂(ObjectFactory)的实例来完成。MyBatis中默认的ObjectFactory的作用就是实例化目标类,它既可以通过默认构造方法实例化,也可以在参数映射存在的时候通过参数构造方法来实例化。
plugins
MyBatis允许在已映射语句执行过程中的某一点进行拦截调用,这种拦截调用是通过插件来实现的。plugins元素的作用就是配置用户所开发的插件。
environments
该元素用于对环境进行配置。MyBatis的环境配置实际上就是数据源的配置。我们可以通过environments元素配置多种数据源,即配置多种数据库。
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
...
</environments>
environments元素是环境配置的根元素,它包含一个default属性,用于指定默认的环境ID。其子元素environment,可以定义多个,其id属性用于表示所定义环境的ID值。在environment中需要配置两个子元素,transactionManager和dataSource。
transactionManager
该标签需要指定type属性,其值有JDBC和MANAGED。如果项目中使用的是Spring+MyBatis,则没有必要配置事务管理器。
* JDBC:此配置直接使用了JDBC的提交和回滚设置,它依赖于从数据源得到的连接来管理事务的作用域
* MANAGED:此配置从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期。在默认情况下,它会关闭连接,但一些容器并不希望这样,为此可以将closeConnection属性设置为false来阻止它默认的关闭行为。
dataSource
该标签需要指定type类型,对应不同的type类型,需要配置不同的property标签。
1,UNPOOLED
配置此数据源类型后,在每次被请求时会打开和关闭连接。它对没有性能需求的简单应用程序是一个很好的选择。其需要配置五个属性。
属性 | 说明 |
---|---|
driver | JDBC驱动的java类的完全限定名 |
url | 数据库的URL地址 |
username | 登录数据库的用户名 |
password | 登录数据库的密码 |
defaultTransatcionIsolationLevel | 默认的连接事务隔离级别 |
2,POOLED
此数据库利用”池“的慨念将JDBC连接对象组织起来,避免了在创建新的连接实例时所需要的初始化和认证的时间。这种方式使得WEB可以快速地响应请求,是当前流行的处理方式。
除了有UNPOOLED的五种属性外,还可以配置其他属性。
属性 | 说明 |
---|---|
poolMaximumActiveConnections | 在任意时间可以存在的活动连接数量,默认值10 |
poolMaximumIdleConnections | 任意时间可能存在的空闲连接数 |
poolMaximumCheckoutTime | 在强制返回之前,池中连接被检出时间,默认值是20000毫秒,即20秒 |
poolTimeToWait | 如果获取连接花费的时间较长,它会给连接池打印状态并重新尝试获取一个连接 |
poolPingQuery | 发送到数据库的侦测查询,用于检验连接是否处于在正常工作秩序中。默认是“NO PING QUERY SET” |
poolPingEnabled | 是否启用侦测查询,若开启,必须使用一个可执行的SQL语句设置poolPingQuery属性,默认值false |
poolPingConnectionsNotUsedFor | 配置poolPingQuery的使用频度。可以被设置成匹配具体的数据库连接超时时间,来避免不必要的侦测。默认值0。(表示所有连接每一时刻都被侦测,只有poolPingEnabled的属性值为true时适用) |
3,JNDI
此数据源可以在EJB或应用服务器等容器中使用。容器可以集中或在外部配置数据源,然后防止一个JNDI上下文的引用。配置JNDI数据源时,只需要配置两个属性。如下
属性 | 说明 |
---|---|
initial_context | 此属性主要用于在IntialContext中寻找上下文 |
data_source | 此属性表示引用数据源实例位置的上下文路径。 |
mappers
在配置文件中,该元素用于指定MyBatis映射文件的位置。一般可以使用以下4种方法引入映射器文件。
1,使用类路径引入
<mappers>
<mapper resource="com/itheima/mapper/UserMapper.xml" />
</mappers>
2,使用本地文件路径引入
<mappers>
<mapper url="file:///D:/com/itheima/mapper/UserMapper.xml"/>
</mappers>
3,使用接口类引入
<mappers>
<mapper class="com.itheima.mapper.UserMapper"/>
</mappers>
4,使用包名引入
<mappers>
<package name="com.itheima.mapper/>
</mappers>