MyBatis核心配置文件中的主要元素
一、 配置文件的主要元素
<configuration>的子元素的执行顺序
<configuration>元素是整个XML配置文件的根元素,相当于MyBatis各元素的管理员。<configuration>有很多子元素,MyBatis的核心配置就是通过这些子元素完成的。需要注意的是,在核心配置文件中,<configuration>的子元素必须按照上图由上到下的顺序进行配置,否则MyBatis在解析XML配置文件的时候会报错。
二、 <properties>元素
<properties>是一个配置属性的元素,该元素的作用是读取外部文件的配置信息。
假设现在有一个配置文件 db.properties,该文件配置了数据库的连接信息,具体如下:
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root
如果想获取数据库的连接信息,可以在 MyBatis 的核心配置文件 mybatis-config.xml 中使用<properties>元素先引入 db.properties 文件,具体代码如下:
<properties resource="db.properties" />
引入 db.properties 文件后,如果希望动态获取 db.properties 文件中的数据库连接信息,可以使用<property>元素配置,示例代码如下:
<dataSource type="POOLED">
<!-- 数据库驱动 -->
<property name="driver" value="${jdbc.driver}" />
<!-- 连接数据库的url -->
<property name="url" value="${jdbc.url}" />
<!-- 连接数据库的用户名 -->
<property name="username" value="${jdbc.username}" />
<!-- 连接数据库的密码 -->
<property name="password" value="${jdbc.password}" />
</dataSource>
db.properties文件实现动态参数配置
完成上述配置后,<dataSource>元素中连接数据库的 4 个属性(driver、url、username 和 password)值将会由db.properties 文件中对应的值来动态替换。这样一来,<properties>元素就可以通过 db.properties 文件实现动态参数配置。
三、<settings>元素中的常见配置参数
配置参数 | 描述 |
cacheEnabled | 用于配置是否开启缓存。 |
lazyLoadingEnabled | 延迟加载的全局开关。 |
aggressiveLazyLoading | 关联对象属性的延迟加载开关。 |
multipleResultSetsEnabled | 是否允许单一语句返回多结果集(需要兼容驱动)。 |
useColumnLabel | 使用列标签代替列名。 |
useGeneratedKeys | 允许JDBC支持自动生成主键,需要驱动兼容。 |
autoMappingBehavior | 指定MyBatis应如何自动映射列到字段或属性。 |
defaultExecutorType | 配置默认的执行器。 |
defaultStatementTimeout | 配置超时时间,它决定驱动等待数据库响应的秒数。 |
mapUnderscoreToCamelCase | 是否开启自动驼峰命名规则(camel case)映射。 |
jdbcTypeForNull | 当没有为参数提供特定的JDBC类型时,为空值指定JDBC类型。 |
<settings>元素中常见配置参数的使用方式
<settings>
<!-- 是否开启缓存 -->
<setting name="cacheEnabled" value="true" />
<!-- 是否开启延迟加载,如果开启,所有关联对象都会延迟加载 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 是否开启关联对象属性的延迟加载,如果开启,对任意延迟属性的调用都
会使用带有延迟加载属性的对象向完整加载,否则每种属性都按需加载 -->
<setting name="aggressiveLazyLoading" value="true" />
...
</settings>
四、 <typeAliases>元素
核心配置文件若要引用一个POJO实体类,需要输入POJO实体类的全限定类名,而全限定类名比较冗长,如果直接输入,很容易拼写错误。例如,POJO实体类User的全限定类名是com.mac.pojo.User,未设置别名之前,映射文件的select语句块若要引用POJO类User,必须使用其全限定类名,引用代码如下:
<select id="findById" parameterType="int" resultType="com.mac.pojo.User">
select * from users where uid = #{id}
</select>
方式一:多个全限定类设置别名的方式
方式一:在<typeAliases>元素下,使用多个<typeAlias>元素为每一个全限定类逐个配置别名。
<typeAliases>
<typeAlias alias=“Usertype="com.mac.pojo.User"/>
<typeAlias alias="Student" type="com.mac.pojo.Student"/>
<typeAlias alias="Employee" type="com.mac.pojo.Employee"/>
<typeAlias alias="Animal" type="com.mac.pojo.Animal"/>
</typeAliases>
方式二:通过自动扫描包的形式自定义别名。
<typeAliases>
<package name="com.mac.pojo"/>
</typeAliases>
常见Java类型的默认别名问题
除了可以使用<typeAliases>元素为实体类自定义别名外,MyBatis框架还为许多常见的Java类型(如数值、字符串、日期和集合等)提供了相应的默认别名。例如别名_byte映射类型byte、_long映射类型long等,别名可以在MyBatis中直接使用,但由于别名不区分大小写,所以在使用时要注意重复定义的覆盖问题。
五、<environments>元素
<environments>元素配置运行环境
MyBatis可以配置多套运行环境,如开发环境、测试环境、生产环境等,我们可以灵活选择不同的配置,从而将SQL映射到不同运行环境的数据库中。不同的运行环境可以通过<environments>元素来配置,但不管增加几套运行环境,都必须要明确选择出当前要用的唯一的一个运行环境。
<environments>各元素配置运行环境
MyBatis的运行环境信息包括事务管理器和数据源。在MyBatis的核心配置文件中,MyBatis通过<environments>元素定义一个运行环境。<environment>元素有两个子元素,<transactionManager>元素和<daraSource>元素。<transactionManager>元素用于配置运行环境的事务管理器;<daraSource>元素用于配置运行环境的数据源信息。
使用<environments>元素进行配置的示例代码
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" /><!—设置使用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>
六、<transcationManager>元素配置事务管理器
在MyBatis中,<transcationManager>元素可以配置两种类型的事务管理器,分别是JDBC和MANAGED。
- JDBC:此配置直接使用JDBC的提交和回滚设置,它依赖于从数据源得到的连接来管理事务的作用域。
- MANAGED:此配置不提交或回滚一个连接,而是让容器来管理事务的整个生命周期。默认情况下,它会关闭连接,但可以将<transcationManager>元素的closeConnection属性设置为false来阻止它默认的关闭行为。
七、MyBatis数据源类型
项目中使用Spring+MyBatis,则没必要在MyBatis中配置事务管理器,实际开发中,项目会使用Spring自带的管理器来实现事务管理。对于数据源的配置,MyBatis提供了UNPOOLED、POOLED和JNDI三种数据源类型。
八、UNPOOLED数据源
UNPOOLED表示数据源为无连接池类型。配置此数据源类型后,程序在每次被请求时会打开和关闭数据库连接。UNPOOLED适用于对性能要求不高的简单应用程。UNPOOLED类型的数据源需要配置5种属性。
UNPOOLED数据源需要配置的属性
属性 | 说明 |
drive | JDBC驱动的Java类的完全限定名 |
url | 数据库的URL地址 |
username | 登录数据库的用户名 |
password | 登录数据库的密码 |
defaultTransactionIsolationLevel | 默认的连接事务隔离级别 |
九、POOLED数据源
POOLED表示数据源为连接池类型。POOLED数据源利用“池”的概念将JDBC连接对象组织起来,节省了在创建新的连接对象时需要初始化和认证的时间。POOLED数据源使得并发Web应用可以快速的响应请求,是当前比较流行的数据源配置类型。
POOLED数据源可额外配置的属性
属性 | 说明 |
poolMaximumActiveConnections | 在任意时间可以存在的活动连接数量,默认值:10。 |
poolMaximumIdleConnections | 任意时间可能存在的空闲连接数。 |
poolMaximumCheckoutTime | 在被强制返回之前,池中连接被检出时间,默认值:20000 毫秒 |
poolTimeToWait | 如果获取连接花费的时间较长,它会给连接池打印状态日志并重新尝试获取一个连接,默认值:20000毫秒。 |
poolPingQuery | 发送到数据库的侦测查询,用来检验连接是否处在正常工作秩序中。默认是“NO PING QUERY SET”。 |
poolPingEnabled | 是否启用侦测查询,默认值:false。 |
poolPingConnectionsNotUsedFor | 配置poolPingQuery的使用频度。 |
十、JNDI数据源
JNDI 表示数据源可以在 EJB 或应用服务器等容器中使用。JNDI数据源需要配置的属性如下所示。
属性 | 说明 |
initial_context | 该属性主要用于在InitialContext中寻找上下文。该属性为可选属性,在忽略时,data_source属性会直接从InitialContext中寻找。 |
data_source | 该属性表示引用数据源对象位置的上下文路径。如果提供了initial_context配置,那么程序会在其返回的上下文中进行查找;如果没有提供,则直接在InitialContext中查找。 |
十一、 <mappers>元素
<mappers>元素作用
在MyBatis的核心配置文件中,<mappers>元素用于引入MyBatis映射文件。映射文件包含了POJO对象和数据表之间的映射信息,MyBatis通过核心配置文件中的<mappers>元素找到映射文件并解析其中的映射信息。通过<mappers>元素引入映射文件的方法有4种。
1、使用类路径引入
使用类路径引入映射文件的示例代码如下所示。
<mappers>
<mapper resource="com/mac/mapper/UserMapper.xml"/>
</mappers>
2、使用本地文件路径引入
使用本地文件路径引入映射文件的示例代码如下所示。
<mappers>
<mapper url="file:///Users/wf/IdeaProjects/mybatis/src/main/resources/mapperUserMapper.xml"/>
</mappers>
3、使用接口类引入
使用接口类引入映射文件的示例代码如下所示。
<mappers>
<mapper class="com.mac.mapper.UserMapper"/>
</mappers>
4、使用包名引入
使用包名引入映射文件的示例代码如下所示。
<mappers>
<package name="com.mac.mapper"/>
</mappers>