DTD(Document Type Defination)文件类型定义,先导入这个,然后xml就会根据这个生成和检验xml文件.
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
以下所有的配置元素都是写在configuration中的
一、properties(属性)
它用来提前声明一些值,在整个全局变量中如果使用的时候只需要加上占位符(#{}和${}),在加载的时候会自动进行取值.
例如:这个例子中username和password将由properties中的子元素替代.比较灵活
<properties>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</properties>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
可以通过resource和url来创建,当然也可以自己完全写里面的property
注意:
在创建SqlSessionFactory的时候,这里也能指定对应的
属性文件.
那么有从resource和url来的,也有properties元素体中的,也有这种作为方法参数传入的,那么使用时候该注意什么?
- MyBatis将先从properties元素体内进行加载,再从resource和url进行加载,最后读取作为方法参数串第的属性.
- 并覆盖已经读取的同名属性,即通过方法参数传递的属性具有最高优先级,resource/url次之,最低级是properties的子元素.
在使用占位符时,还可以指定默认值
如
<property name="username" value="${username : root}"/>
<!-- 如果属性 'username' 没有被配置,'username' 属性的值将为 'root' -->
但是这个要进行开启,并且 当你使用的变量名称和:有冲突时,可以修改默认的separator分隔符为其他字符.
二、Settings(设置)
这个有些多,可以查看官方文档 http://www.mybatis.org/mybatis-3/zh/configuration.html#settings
三、typeAliases(类型别名)
在xml配置中,有很多地方要使用到完全限定名,为了使代码看起来简洁,便有了类型别名.
例子:bean目录下的类user就使用成了User,
在后面使用的时候,比如设置查询的返回类型可以使用User直接替代,不用使用完全限定名
也可以在类前面使用Alias注解
也可以对一个包名进行别名替代
这样在com.bean这个包下面的所有类,可以使用这些类的首字母小写来作为非限定类名作为它的别名.
如图com.bean下面有这三个类,它们的别名分别为
orders,user,user2.若有注解,则别名为其注解值
四、environments环境配置
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</dataSource>
</environment>
</environments>
- 你可以在environments里面创建多个environment元素,以适应不同的环境,比如开发,测试.
但是要指定default的是哪一个 - transactionManager事务管理器
- dataSource 有三种UNPOOLED/POOLED/JNDI 不适用连接池就使用第一种,使用连接池就使用第二种
driver – 这是 JDBC 驱动的 Java 类的完全限定名(并不是 JDBC 驱动中可能包含的数据源类)。
url – 这是数据库的 JDBC URL 地址。
username – 登录数据库的用户名。
password – 登录数据库的密码。
defaultTransactionIsolationLevel – 默认的连接事务隔离级别。
poolMaximumActiveConnections – 在任意时间可以存在的活动(也就是正在使用)连接数量,默认值:10
poolMaximumIdleConnections – 任意时间可能存在的空闲连接数。
poolMaximumCheckoutTime – 在被强制返回之前,池中连接被检出(checked out)时间,默认值:20000 毫秒(即 20 秒)
poolTimeToWait – 这是一个底层设置,如果获取连接花费了相当长的时间,连接池会打印状态日志并重新尝试
获取一个连接(避免在误配置的情况下一直安静的失败),默认值:20000 毫秒(即 20 秒)。
poolMaximumLocalBadConnectionTolerance – 这是一个关于坏连接容忍度的底层设置, 作用于每一个尝试从
缓存池获取连接的线程。 如果这个线程获取到的是一个坏的连接,那么这个数据源允许这个线程尝试重新
获取一个新的连接,但是这个重新尝试的次数不应该超过 poolMaximumIdleConnections 与 poolMaximumLocalBadConnectionTolerance 之和。 默认值:3
poolPingQuery – 发送到数据库的侦测查询,用来检验连接是否正常工作并准备接受请求。
默认是“NO PING QUERY SET”,这会导致多数数据库驱动失败时带有一个恰当的错误消息。
poolPingEnabled – 是否启用侦测查询。若开启,需要设置 poolPingQuery属性
为一个可执行的 SQL 语句(最好是一个速度非常快的 SQL 语句),默认值:false。
poolPingConnectionsNotUsedFor – 配置 poolPingQuery 的频率。可以被设置为和数据库连接超时时间
一样,来避免不必要的侦测,默认值:0(即所有连接每一时刻都被侦测 — 当然仅当 poolPingEnabled 为 true 时适用
五、mappers映射器
现在要告诉MyBatis去哪里找到SQL映射语句了,有四种方式.
1.使用映射器接口类的完全限定类名
<mappers>
<mapper class="com.dao.OrdersMapper"/>
<mapper class="com.dao.UserMapper"/>
<mapper class="com.dao.UserMapper2“>
</mappers>
2.如果接口比较多的话,就需要将他们放在一个包中,直接导入包名
将包内的映射器接口实现全部注册为映射器
<mappers>
<package name="com.dao"/>
</mappers>
3.使用完全限定资源定位符(URL)
4.使用相对于类路径的资源引用
<mappers>
<mapper resource="mapper/OrdersMapper.xml"></mapper>
<mapper resource="mapper/UserMapper.xml"></mapper>
<mapper resource="mapper/UserMapper2.xml"></mapper>
</mappers>
但是前提你要创建一个根目录,命名为resources