配置文档的顶层结构如下(必须严格按照以下顺序):
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
标签具体含义
mybatis-config.xml文件如下:
1. <?xml version="1.0" encoding="UTF-8" ?> 2. <!DOCTYPE configuration 3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4. "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5. <configuration> 6. <environments default="development"> 7. <environment id="development"> 8. <transactionManager type="JDBC"/> 9. <dataSource type="POOLED"> 10. <property name="driver" value="com.mysql.cj.jdbc.Driver"/> 11. <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> 12. <property name="username" value="root"/> 13. <property name="password" value="newroot"/> 14. </dataSource> 15. </environment> 16. </environments> 17. <mappers> 18. <!--sql映射文件创建好之后,需要将该文件路径配置到这里--> 19. <mapper resource="CarMapper.xml"/> 20. </mappers> 21. </configuration>
● configuration:根标签,表示配置信息。
● environments:环境(多个),以“s”结尾表示复数,也就是说mybatis的环境可以配置多个数据源。
○ default属性:表示默认使用的是哪个环境,default后面填写的是environment的id。default的值只需要和environment的id值一致即可。
● environment:具体的环境配置(主要包括:事务管理器的配置 + 数据源的配置)
○ id:给当前环境一个唯一标识,该标识用在environments的default后面,用来指定默认环境的选择。
● transactionManager:配置事务管理器
○ type属性:指定事务管理器具体使用什么方式,可选值包括两个
■ JDBC:使用JDBC原生的事务管理机制。底层原理:事务开启conn.setAutoCommit(false); ...处理业务...事务提交conn.commit();
■ MANAGED:交给其它容器来管理事务,比如WebLogic、JBOSS等。如果没有管理事务的容器,则没有事务。没有事务的含义:只要执行一条DML语句,则提交一次。
● dataSource:指定数据源
○ type属性:用来指定具体使用的数据库连接池的策略,可选值包括三个
■ UNPOOLED:采用传统的获取连接的方式,虽然也实现Javax.sql.DataSource接口,但是并没有使用池的思想。
● property可以是:
○ driver 这是 JDBC 驱动的 Java 类全限定名。
○ url 这是数据库的 JDBC URL 地址。
○ username 登录数据库的用户名。
○ password 登录数据库的密码。
○ defaultTransactionIsolationLevel 默认的连接事务隔离级别。
○ defaultNetworkTimeout 等待数据库操作完成的默认网络超时时间(单位:毫秒)
■ POOLED:采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现。
● property可以是(除了包含UNPOOLED中之外):
○ poolMaximumActiveConnections 在任意时间可存在的活动(正在使用)连接数量,默认值:10
○ poolMaximumIdleConnections 任意时间可能存在的空闲连接数。
○ 其它....
■ JNDI:采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样。如果不是web或者maven的war工程,JNDI是不能使用的。
● property可以是(最多只包含以下两个属性):
○ initial_context 这个属性用来在 InitialContext 中寻找上下文(即,initialContext.lookup(initial_context))这是个可选属性,如果忽略,那么将会直接从 InitialContext 中寻找 data_source 属性。
○ data_source 这是引用数据源实例位置的上下文路径。提供了 initial_context 配置时会在其返回的上下文中进行查找,没有提供时则直接在 InitialContext 中查找。
● mappers:在mappers标签中可以配置多个sql映射文件的路径。
● mapper:配置某个sql映射文件的路径
○ resource属性:使用相对于类路径的资源引用方式
○ url属性:使用完全限定资源定位符(URL)方式
数据源dataSource
dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
- 大多数 MyBatis 应用程序会按示例中的例子来配置数据源。虽然数据源配置是可选的,但如果要启用延迟加载特性,就必须配置数据源。
有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]"):
UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接。虽然有点慢,但对那些数据库连接可用性要求不高的简单应用程序来说,是一个很好的选择。 性能表现则依赖于使用的数据库,对某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形。UNPOOLED 类型的数据源仅仅需要配置以下 5 种属性:
- driver – 这是 JDBC 驱动的 Java 类全限定名(并不是 JDBC 驱动中可能包含的数据源类)。
- url – 这是数据库的 JDBC URL 地址。
- username – 登录数据库的用户名。
- password – 登录数据库的密码。
- defaultTransactionIsolationLevel – 默认的连接事务隔离级别。
- defaultNetworkTimeout – 等待数据库操作完成的默认网络超时时间(单位:毫秒)。查看 java.sql.Connection#setNetworkTimeout() 的 API 文档以获取更多信息。
作为可选项,你也可以传递属性给数据库驱动。只需在属性名加上“driver.”前缀即可,例如:
- driver.encoding=UTF8
这将通过 DriverManager.getConnection(url, driverProperties) 方法传递值为 UTF8 的 encoding 属性给数据库驱动。
POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。
除了上述提到 UNPOOLED 下的属性外,还有更多属性用来配置 POOLED 的数据源:
- poolMaximumActiveConnections – 在任意时间可存在的活动(正在使用)连接数量,默认值:10
- poolMaximumIdleConnections – 任意时间可能存在的空闲连接数。
- poolMaximumCheckoutTime – 在被强制返回之前,池中连接被检出(checked out)时间,默认值:20000 毫秒(即 20 秒)
- poolTimeToWait – 这是一个底层设置,如果获取连接花费了相当长的时间,连接池会打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直失败且不打印日志),默认值:20000 毫秒(即 20 秒)。
- poolMaximumLocalBadConnectionTolerance – 这是一个关于坏连接容忍度的底层设置, 作用于每一个尝试从缓存池获取连接的线程。 如果这个线程获取到的是一个坏的连接,那么这个数据源允许这个线程尝试重新获取一个新的连接,但是这个重新尝试的次数不应该超过 poolMaximumIdleConnections 与 poolMaximumLocalBadConnectionTolerance 之和。 默认值:3(新增于 3.4.5)
- poolPingQuery – 发送到数据库的侦测查询,用来检验连接是否正常工作并准备接受请求。默认是“NO PING QUERY SET”,这会导致多数数据库驱动出错时返回恰当的错误消息。
- poolPingEnabled – 是否启用侦测查询。若开启,需要设置 poolPingQuery 属性为一个可执行的 SQL 语句(最好是一个速度非常快的 SQL 语句),默认值:false。
- poolPingConnectionsNotUsedFor – 配置 poolPingQuery 的频率。可以被设置为和数据库连接超时时间一样,来避免不必要的侦测,默认值:0(即所有连接每一时刻都被侦测 — 当然仅当 poolPingEnabled 为 true 时适用)。
JNDI – 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。这种数据源配置只需要两个属性:
- initial_context – 这个属性用来在 InitialContext 中寻找上下文(即,initialContext.lookup(initial_context))。这是个可选属性,如果忽略,那么将会直接从 InitialContext 中寻找 data_source 属性。
- data_source – 这是引用数据源实例位置的上下文路径。提供了 initial_context 配置时会在其返回的上下文中进行查找,没有提供时则直接在 InitialContext 中查找。
和其他数据源配置类似,可以通过添加前缀“env.”直接把属性传递给 InitialContext。比如:
- env.encoding=UTF8
这就会在 InitialContext 实例化时往它的构造方法传递值为 UTF8 的 encoding 属性。
properties导入配置
mybatis提供了更加灵活的配置,连接数据库的信息可以单独写到一个属性资源文件中,假设在类的根路径下创建jdbc.properties文件,配置如下:
jdbc.properties:
1. jdbc.driver=com.mysql.cj.jdbc.Driver 2. jdbc.url=jdbc:mysql://localhost:3306/mybatis
在mybatis核心配置文件中引入并使用:
1. <?xml version="1.0" encoding="UTF-8" ?> 2. <!DOCTYPE configuration 3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4. "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5. <configuration> 6. 7. <!--引入外部属性资源文件--> 8. <properties resource="jdbc.properties"> 9. <property name="jdbc.username" value="root"/> 10. <property name="jdbc.password" value="root"/> 11. </properties> 12. 13. <environments default="dev"> 14. <environment id="dev"> 15. <transactionManager type="JDBC"/> 16. <dataSource type="POOLED"> 17. <!--${key}使用--> 18. <property name="driver" value="${jdbc.driver}"/> 19. <property name="url" value="${jdbc.url}"/> 20. <property name="username" value="${jdbc.username}"/> 21. <property name="password" value="${jdbc.password}"/> 22. </dataSource> 23. </environment> 24. </environments> 25. <mappers> 26. <mapper resource="CarMapper.xml"/> 27. </mappers> 28. </configuration>
properties两个属性:
resource:这个属性从类的根路径下开始加载。【常用的。】
url:从指定的url加载,假设文件放在d:/jdbc.properties,这个url可以写成:file:///d:/jdbc.properties。注意是三个斜杠哦。
注意:如果不知道mybatis-config.xml文件中标签的编写顺序的话,可以有两种方式知道它的顺序:
- 第一种方式:查看dtd约束文件。
- 第二种方式:通过idea的报错提示信息。【一般采用这种方式】