<?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>
<!--resource是在类的根路径下查找,url是绝对路径,如果配置两个,下面不用子属性property -->
<properties resource="路径">
<property name="属性名" value="属性值"/>
</properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--mysql数据库连接信息,如果有配置properties,可以使用以下但是${里面写properties的属性名}-->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--这里指定XXXMapper.xml文件的路径,resource是在类的根路径下查找,url是绝对路径-->
<mapper resource="路径"/>
<mapper url="file:///绝对路径"/>
<mapper class="完全限定接口名"/>
<package name="包名"/>
</mappers>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
configuration
configuration:根标签,表示配置信息。
properties
在properties标签中可以配置很多property属性
java.util.Properties类。是一个Map集合。key和value都是String类型
- resource属性:使⽤相对于类路径的资源引⽤⽅式
- url属性:使⽤完全限定资源定位符(URL)⽅式
property
properties的子属性
是一个Map集合。
- name属性:属性名,Map集合的key
- value属性:属性值,Map集合的value
environments
environments:环境(多个),以“s”结尾表示复数,也就是说mybatis的环境可以配置多个数据源。
- default属性:表示默认使⽤的是哪个环境,default后⾯填写的是environment的id。default的值只需要和environment的id值⼀致即可。
默认环境:当使用mybatis创建SqlSessionFactory对象的时候,没有指定环境的话,默认使用哪个环境。
environment
environment:具体的环境配置(主要包括:事务管理器的配置 + 数据源的配置),一般一个数据库配置一个环境
- 属性id:给当前环境⼀个唯⼀标识,该标识⽤在environments的default后⾯,⽤来指定默认环境的选择。
在源码里面除了bulid方法除了传一个InputStream,还有其他的重载方法
另一个重载方法可传一个environment,它就是environment标签的属性id,也就是说,当创建SqlSessionFactory对象的时候,没有指定环境的话,默认是environments标签的default属性的值,如果指定属性的话,传的是environment的id,表示使用这个数据库环境。
transactionManager
transactionManager:配置事务管理器
- type属性:指定事务管理器具体使⽤什么⽅式,可选值包括两个
- JDBC:使⽤JDBC原⽣的事务管理机制。底层原理:事务开启 conn.setAutoCommit(false);
…处理业务…事务提交conn.commit(); - MANAGED:交给其它容器来管理事务,⽐如WebLogic、JBOSS等。如果没有管理事务的容器,则没有事务。没有事务的含义:只要执⾏⼀条DML语句,则提交⼀次。
在mybatis中提供了一个事务管理器接口:Transaction
该接口下有两个实现类:
JdbcTransaction
ManagedTransaction
如果type="JDBC",那么底层会实例化JdbcTransaction对象。
如果type="MANAGED",那么底层会实例化ManagedTransaction。
dataSource
dataSource:指定数据源(数据库连接池),为程序提供Connection对象。
- type属性:⽤来指定具体使⽤的数据库连接池的策略,可选值包括三个
- UNPOOLED:采⽤传统的获取连接的⽅式,虽然也实现Javax.sql.DataSource接⼝,但是并没有使⽤池的思想。每一次请求过来之后,都是创建新的Connection对象。
- POOLED:采⽤传统的javax.sql.DataSource规范中的连接池,使用mybatis自己实现的数据库连接池。
- JNDI:集成其它第三方的数据库连接池,采⽤服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不⼀样。如果不是web或者maven的war⼯程,JNDI是不能使⽤的。例如把C3P0配置到Tomcat上。
property
dataSource的type属性为UNPOOLED
- driver – 这是 JDBC 驱动的 Java 类全限定名(并不是 JDBC 驱动中可能包含的数据源类)。
- url – 这是数据库的 JDBC URL 地址。
- username – 登录数据库的用户名。
- password – 登录数据库的密码。
- defaultTransactionIsolationLevel – 默认的连接事务隔离级别。
- defaultNetworkTimeout – 等待数据库操作完成的默认网络超时时间(单位:毫秒)
dataSource的type属性为POOLED
除了上述提到 UNPOOLED 下的属性外,还有更多属性用来配置 POOLED 的数据源:
- poolMaximumActiveConnections – 在任意时间可存在的活动(正在使用)连接数量,默认值:10
- poolMaximumIdleConnections – 任意时间可能存在的空闲连接数。
- poolMaximumCheckoutTime – 在被强制返回之前,池中连接被检出(checked out)时间,默认值:20000
毫秒(即 20 秒) - poolTimeToWait –
这是一个底层设置,如果获取连接花费了相当长的时间,连接池会打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直失败且不打印日志),默认值:20000
毫秒(即 20 秒)。 - poolMaximumLocalBadConnectionTolerance – 这是一个关于坏连接容忍度的底层设置,
作用于每一个尝试从缓存池获取连接的线程。
如果这个线程获取到的是一个坏的连接,那么这个数据源允许这个线程尝试重新获取一个新的连接,但是这个重新尝试的次数不应该超过poolMaximumIdleConnections 与 poolMaximumLocalBadConnectionTolerance之和。 默认值:3(新增于 Mybatis3.4.5) - poolPingQuery – 发送到数据库的侦测查询,用来检验连接是否正常工作并准备接受请求。默认是“NO PING QUERY SET”,这会导致多数数据库驱动出错时返回恰当的错误消息。
- poolPingEnabled – 是否启用侦测查询。若开启,需要设置 poolPingQuery 属性为一个可执行的 SQL语句(最好是一个速度非常快的 SQL 语句),默认值:false。
- poolPingConnectionsNotUsedFor – 配置 poolPingQuery的频率。可以被设置为和数据库连接超时时间一样,来避免不必要的侦测,默认值:0(即所有连接每一时刻都被侦测 — 当然仅当poolPingEnabled 为 true 时适用)。
dataSource的type属性为JNDI
- initial_context – 这个属性用来在 InitialContext中寻找上下文(即,initialContext.lookup(initial_context))。这是个可选属性,如果忽略,那么将会直接从InitialContext 中寻找 data_source 属性。
- data_source – 这是引用数据源实例位置的上下文路径。提供了 initial_context
配置时会在其返回的上下文中进行查找,没有提供时则直接在 InitialContext 中查找。
mappers
mappers:在mappers标签中可以配置多个sql映射⽂件的路径。
mapper
mapper:配置某个sql映射⽂件的路径
- resource属性:使⽤相对于类路径的资源引⽤⽅式,映射文件需要放到类路径下。
- url属性:使⽤完全限定资源定位符(URL)⽅式,需要提供一个绝对路径
- class属性:使用映射器接口实现类的完全限定类名,会在接口这个包下寻找接口名相同的XML文件,需要保证映射文件和接口必须在同一个包下(或者在类路径资源下有与接口包名相同的目录名)。
package
将包内的映射器接口实现全部注册为映射器
- name属性:包名,需要保证映射文件和接口必须在同一个包下(或者在类路径资源下有与接口包名相同的目录名),并且名字一致。