MyBatis的第三天笔记
4. MyBatis核心配置文件详解
4.1 配置文件结构
MyBatis核心配置文件采用XML格式,主要用于配置数据库连接、事务管理、映射文件等信息。以下是一个基本的配置文件示例:
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="CarMapper.xml"/>
</mappers>
</configuration>
4.2 核心标签说明
4.2.1 configuration根标签
- 作为配置文件的根标签
- 包含所有MyBatis的配置信息
4.2.2 environments标签
<?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>
<!--默认使用开发环境-->
<!--<environments default="dev">-->
<!--默认使用生产环境-->
<environments default="production">
<!--开发环境-->
<environment id="dev">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
<!--生产环境-->
<environment id="production">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="CarMapper.xml"/>
</mappers>
</configuration>
- 用于配置多个环境,如开发环境、测试环境、生产环境等
- default属性:指定默认使用的环境ID
- 可以配置多个environment子标签
4.2.3 environment标签
- 配置具体的环境信息
- id属性:环境的唯一标识
- 主要包含两个子标签:transactionManager和dataSource
4.2.4 transactionManager标签
<transactionManager type="JDBC"/>
<transactionManager type="MANAGED"/>
- 配置事务管理器
- type属性可选值:
- JDBC:使用JDBC原生的事务管理机制
- 开启事务:conn.setAutoCommit(false);
- 处理业务…
- 提交事务:conn.commit();
- MANAGED:将事务管理交给其他容器(如Spring),交给容器去管理事务,但目前使用的是本地程序,没有容器的支持,当mybatis找不到容器的支持时:没有事务。也就是说只要执行一条DML语句,则提交一次
- JDBC:使用JDBC原生的事务管理机制
4.2.5 dataSource标签
- 配置数据源
-
<dataSource type="UNPOOLED">
<dataSource type="POOLED">
<dataSource type="JNDI">
- type属性可选值:
- UNPOOLED:不使用连接池
- POOLED:使用连接池
- JNDI:使用JNDI查找数据源
UNPOOLED数据源
可配置的属性:
- driver:JDBC驱动的类名
- url:数据库的JDBC URL
- username:数据库用户名
- password:数据库密码
- defaultTransactionIsolationLevel:默认的连接事务隔离级别
- defaultNetworkTimeout:默认的网络超时时间
POOLED数据源
除了包含UNPOOLED的所有属性外,还可以配置:
- poolMaximumActiveConnections:最大活动连接数。 默认值10
- poolMaximumIdleConnections:最大空闲连接数。默认值5
- poolMaximumCheckoutTime:强行回归池的时间。默认值20秒。
- poolTimeToWait:当无法获取到空闲连接时,每隔20秒打印一次日志,避免因代码配置有误,导致傻等。(时长是可以配置的)
JNDI数据源
JNDI的方式:表示对接JNDI服务器中的连接池。这种方式给了我们可以使用第三方连接池的接口。如果想使用dbcp、c3p0、druid(德鲁伊)等,需要使用这种方式。
可配置的属性:
- initial_context:用于在InitialContext中寻找上下文(可选)
- data_source:引用数据源实例的上下文路径
4.2.6 mappers标签
- 配置SQL映射文件
- 可以包含多个mapper子标签
- mapper标签的配置方式:
- resource属性:使用相对于类路径的资源引用
- url属性:使用完全限定资源定位符
4.2.7 properties
mybatis提供了更加灵活的配置,连接数据库的信息可以单独写到一个属性资源文件中,假设在类的根路径下创建jdbc.properties文件,配置如下:
jdbc.driver=数据库连接驱动
jdbc.url=数据库名
jdbc.username=数据库用户名
jdbc.password=数据库密码
在mybatis-config.xml应用
<?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="jdbc.properties"/>
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--${key}使用-->
<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="CarMapper.xml"/>
</mappers>
</configuration>
4.3 最佳实践
- 环境配置
<environments default="development">
<!-- 开发环境 -->
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 开发环境配置 -->
</dataSource>
</environment>
<!-- 生产环境 -->
<environment id="production">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 生产环境配置 -->
</dataSource>
</environment>
</environments>
- 使用指定环境
// 使用默认环境
SqlSessionFactory factory = builder.build(inputStream);
// 使用指定环境
SqlSessionFactory factory = builder.build(inputStream, "development");
- 事务管理器选择
- 单独使用MyBatis时,使用JDBC类型
- 与Spring集成时,使用MANAGED类型
- 数据源选择
- 一般情况下使用POOLED类型
- 在Web应用中可以考虑使用JNDI类型
- 只有特殊需求时才使用UNPOOLED类