购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 MyBatis核心配置文件

学习完MyBatis的核心对象之后,下面学习它的核心配置文件,MyBatis核心配置文件配置了MyBatis的一些全局信息,包括数据库连接信息、MyBatis运行时所需的各个特性,以及设置和影响MyBatis行为的一些属性。下面将对MyBatis核心配置文件进行详细讲解。

2.2.1 配置文件的主要元素

MyBatis 的核心配置文件包含了很多影响MyBatis 行为的重要信息。一个项目通常只会有一个核心配置文件,并且核心配置文件编写后也不会轻易改动。MyBatis核心配置文件的主要元素如图2-2所示。

图2-2 MyBatis核心配置文件的主要元素

从图2-2中可以看到,<configuration>元素是整个XML配置文件的根元素,相当于MyBatis各元素的管理员。<configuration>有很多子元素,MyBatis的核心配置就是通过这些子元素完成的。需要注意的是,在核心配置文件中,<configuration>的子元素必须按照图2-2中由上到下的顺序进行配置,否则 MyBatis 在解析XML配置文件的时候会报错。下面对<configuration>元素的几个常用子元素进行详细讲解。

2.2.2 <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>

上述代码中,<dataSource>元素中连接数据库的4个属性(driver、url、username和password)值将会由db.properties文件中对应的值来动态替换。这样一来,<properties>元素就可以通过db.properties文件实现动态参数配置。

2.2.3 <settings>元素

<settings>元素主要用于改变MyBatis运行时的行为,如开启二级缓存、开启延迟加载等。

<settings>元素中的常见配置参数如表2-3所示。

表2-3 <settings>元素中的常见配置参数

表2-3中介绍了<settings>元素中的常见配置参数,这些配置参数在配置文件中的使用方式如下:

<settings>
    <!--是否开启缓存 -->
    <setting name="cacheEnabled" value="true" />
    <!--是否开启延迟加载,如果开启,所有关联对象都会延迟加载 -->
    <setting name="lazyLoadingEnabled" value="true" />
    <!--是否开启关联对象属性的延迟加载,如果开启,对任意延迟属性的调用都
    会使带有延迟加载属性的对象完整加载,否则每种属性都按需加载 -->
    <setting name="aggressiveLazyLoading" value="true" />
    ...
</settings>

表2-3中介绍的配置参数在大多数情况下都不需要开发人员去配置,通常只在需要时配置少数几项即可。这里读者了解这些可设置的参数值及其含义即可。

2.2.4 <typeAIiases>元素

核心配置文件若要引用一个POJO实体类,需要输入POJO实体类的全限定类名,而POJO实体类的全限定类名比较冗长,如果直接输入POJO实体类的全限定类名,很容易拼写错误。这时,可以使用<typeAliases>元素为核心配置文件中的POJO实体类设置一个简短的别名,通过MyBatis的核心配置文件与映射文件相关联,减少全限定类名的冗余,以简化操作。例如,POJO实体类User的全限定类名是com.itheima.pojo.User,未设置别名之前,映射文件的select语句块若要引用POJO类User,必须使用其全限定类名,引用代码如下:

<select id="findById" parameterType="int"
  resultType="com.itheima.pojo.User"> select * from users where uid = #{id}
</select>

在核心配置文件mybatis-config.xml中,使用<typeAliases>元素为com.itheima.pojo.User实体类定义别名,示例代码如下:

<typeAliases>
    <typeAlias alias="User" type="com.itheima.pojo.User"/>
</typeAliases>

上述代码为全限定类名com.itheima.pojo.User定义了一个别名User,定义了别名之后,映射文件中只需使用别名User就可以引用POJO实体类com.itheima.pojo.User,具体引用代码如下:

<select id="findById" parameterType="int"
    resultType="User"> select * from users where uid = #{id}
</select>

如果有多个全限定类需要设置别名,有以下两种方式可以完成设置。

(1)在<typeAliases>元素下,使用多个<typeAlias>元素为每一个全限定类逐个配置别名,示例代码如下:

<typeAliases>
    <typeAlias alias="User" type="com.itheima.pojo.User"/>
    <typeAlias alias="Student" type="com.itheima.pojo.Student"/>
    <typeAlias alias="Employee" type="com.itheima.pojo.Employee"/>
    <typeAlias alias="Animal" type="com.itheima.pojo.Animal"/>
</typeAliases>

上述配置方式虽然可以为多个全限定类设置别名,但代码比较冗长。

(2)通过自动扫描包的形式自定义别名。具体示例代码如下:

<typeAliases>
    <package name="com.itheima.pojo"/>
</typeAliases>

按照上述代码配置后,MyBatis会自动扫描<package>元素的name属性指定的包com.itheima.pojo,并自动将该包下的所有实体类以首字母小写的类名作为别名。例如,它会自动给com.itheima.pojo.User设置别名user。

除了可以使用<typeAliases>元素为实体类自定义别名外,MyBatis 框架还为许多常见的Java 类型(如数值、字符串、日期和集合等)提供了相应的默认别名,MyBatis默认的常见Java类型的别名如表2-4所示。

表2-4 MyBatis默认的常见Java类型的别名

续表

表2-4所列举的别名可以在MyBatis中直接使用,但由于别名不区分大小写,所以在使用时要注意重复定义的覆盖问题。

2.2.5 <environments>元素

MyBatis 可以配置多套运行环境,如开发环境、测试环境、生产环境等,可以灵活选择不同的配置,从而将SQL映射到不同运行环境的数据库中。不同的运行环境可以通过<environments>元素来配置,但不管增加几套运行环境,都必须要明确选择出当前要用的唯一的一个运行环境。

MyBatis的运行环境信息包括事务管理器和数据源。在MyBatis的核心配置文件中,MyBatis通过<environments>元素定义一个运行环境。<environments>元素有两个子元素:<transactionManager>元素和<dataSource>元素。<transactionManager>元素用于配置运行环境的事务管理器;<dataSource>元素用于配置运行环境的数据源信息。使用<environments>元素进行环境配置的示例代码如下:

1  <environments default="development">
2     <environment id="development">
3        <!—设置使用JDBC事务管理 -->
4        <transactionManager type="JDBC" />
5        <!-配置数据源 -->
6        <dataSource type="POOLED">
7           <property name="driver" value="${jdbc.driver}" />
8           <property name="url" value="${jdbc.url}" />
9           <property name="username" value="${jdbc.username}" />
10          <property name="password" value="${jdbc.password}" />
11       </dataSource>
12    </environment>
13 ...
14 </environments>

在上述示例代码中,<environments>元素是环境配置的根元素,它包含一个default属性,该属性用于指定默认环境的id。<environment>是<environments>元素的子元素,一个<environments>元素下可以有多个<environment>子元素,<environment>元素的id属性用于设置所定义环境的id值。在<environment>元素内,使用<transactionManager>元素配置事务管理,它的type属性用于指定事务管理的方式,即使用哪种事务管理器;<dataSource>元素用于配置数据源,它的type属性用于指定所使用的数据源。

在MyBatis中,<transactionManager>元素可以配置两种类型的事务管理器,分别是JDBC和MANAGED。这两个事务管理器的含义如下。

● JDBC:此配置直接使用JDBC的提交和回滚设置,它依赖于从数据源得到的连接来管理事务的作用域。

● MANAGED:此配置不提交或回滚一个连接,而是让容器来管理事务的整个生命周期。默认情况下,它会关闭连接,但有些容器并不希望这样,为此可以将<transactionManager>元素的closeConnection属性设置为false来阻止它默认的关闭行为。

注意:

如果项目中使用的是Spring+MyBatis,则没有必要在MyBatis中配置事务管理器,因为实际开发中项目会使用Spring自带的管理器来实现事务管理。

对于数据源的配置,MyBatis框架提供了UNPOOLED、POOLED和JNDI 3种数据源类型,具体如下。

1. UNPOOLED

UNPOOLED 表示数据源为无连接池类型。配置此数据源类型后,程序在每次被请求时会打开和关闭数据库连接。UNPOOLED适用于对性能要求不高的简单应用程序。

UNPOOLED类型的数据源需要配置5种属性,如表2-5所示。

表2-5 UNPOOLED数据源需要配置的属性

2. POOLED

POOLED表示数据源为连接池类型。POOLED数据源利用“池”的概念将JDBC连接对象组织起来,节省了创建新的连接对象时需要初始化和认证的时间。POOLED数据源使并发Web应用可以快速响应请求,是当前比较流行的数据源配置类型,本书中使用的数据源就是POOLED类型。

配置POOLED数据源类型时,除了可以使用表2-5中的5种属性外,还可以配置更多的属性,如表2-6所示。

表2-6 POOLED数据源可额外配置的属性

续表

3. JNDI

JNDI表示数据源可以在EJB或应用服务器等容器中使用。配置JNDI数据源时,只需要配置两个属性,如表2-7所示。

表2-7 JNDI数据源需要配置的属性

2.2.6 <mappers>元素

在MyBatis的核心配置文件中,<mappers>元素用于引入MyBatis映射文件。映射文件包含了POJO对象和数据表之间的映射信息,MyBatis通过核心配置文件中的<mappers>元素找到映射文件并解析其中的映射信息。

通过<mappers>元素引入映射文件的方法有4种,具体如下。

1.使用类路径引入

使用类路径引入映射文件的示例代码如下:

<mappers>
    <mapper resource="com/itheima/mapper/UserMapper.xml"/>
</mappers>

2.使用本地文件路径引入

使用本地文件路径引入映射文件的示例代码如下:

<mappers>
    <mapper url="file:///D:/com/itheima/mapper/UserMapper.xml"/>
</mappers>

3.使用接口类引入

使用接口类引入映射文件的示例代码如下:

<mappers>
    <mapper class="com.itheima.mapper.UserMapper"/>
</mappers>

4.使用包名引入

使用包名引入映射文件的示例代码如下:

<mappers>
    <package name="com.itheima.mapper"/>
</mappers>

上述4种引入方式非常简单,读者可以根据实际项目需要选择使用。 0WPq0HEyrwbaLFZYr/sQeYIN6Uoqpdo9bnwPd+AUyLgpYAJ2m12uO16lKGDixf0i

点击中间区域
呼出菜单
上一章
目录
下一章
×