使用MyBatis框架进行开发,需要创建MyBatis的核心配置文件,该配置文件包含重要的元素,熟悉配置文件中各个元素的功能十分重要。
在MyBatis框架的核心配置文件中,
元素是配置文件的根元素,其他元素都要在
元素内配置。
MyBatis配置文件中的主要元素如下所示。
<configuration>
<!-- 属性 -->
<properties/>
<!-- 设置 -->
<settings/>
<!-- 类型命名 -->
<typeAliases/>
<!-- 类型处理器 -->
<typeHandlers/>
<!-- 对象工厂 -->
<objectFactory/>
<!-- 插件 -->
<plugins/>
<!-- 配置环境 -->
<environments>
<!-- 环境变量 -->
<environment>
<!-- 事务管理器 -->
<transactionManager/>
<!-- 数据源 -->
<dataSourse/>
</environment>
</environments>
<!-- 数据库厂商标识 -->
<databaseIdProvider/>
<!-- 映射器 -->
<mappers/>
</configuration>
在MyBatis的配置文件中包含多个元素,这些元素在配置文件中分别发挥着不同的作用。开发人员需要熟悉的是元素各个子元素的配置。
注意:
的子元素必须按照由上到下的顺序进行配置,否则MyBatis在解析XML配置文件的时候会报错。
是一个配置属性的元素,通过外部配置来动态替换内部定义的属性。
【示例】配置数据库的连接等属性,具体方式如下。
步骤01 在项目的src目录下创建一个名称为db.properties的配置文件,代码如下所示。
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db_mybatis
jdbc.username=root
jdbc.password=root
步骤02 在MyBatis配置文件mybatis-config.xml中配置
属性,具体如下。
<properties resource="db.properties" />
完成上述配置,dataSource中连接数据库的4个属性(driver、url、username和password)
值将会由db.properties
文件中对应的值来动态替换。这样就为配置提供了灵活性。另外,还可以通过配置
元素的子元素
以及通过方法参数传递的方式来获取属性值。由于使用properties配置文件来配置属性值可以方便地在多个配置文件中使用这些属性值,并且方便维护和修改,因此在实际开发中最常用。
元素主要用于改变MyBatis运行时的行为,例如开启二级缓存、开启延迟加载等。
元素中的常见配置及其描述如下表所示。
元素中的常见配置在配置文件中的使用方式如下。
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="true"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
</settings>
元素用于为配置文件中的Java类型设置一个简短的名字,即设置别名。别名的设置与XML配置相关,其使用的意义在于减少全限定类名的冗余。使用
元素配置别名的方法如下:
<!--定义别名-->
<typeAliases>
<typeAlias type="user" type="com.ssm.po.User"/>
</typeAliases>
元素的子元素中的type属性用于指定需要被定义别名的类的全限定名;alias属性的属性值“user”就是自定义的别名,可以代替“com.ssm.po.User”使用在MyBatis文件的任何位置。如果省略alias属性,MyBatis会默认将类名首字母小写后的名称作为别名。
当POJO类过多时,还可以通过自动扫描包的形式自定义别名,具体示例如下。
<!--使用自动扫描包来定义别名-->
<typeAliases>
<package name="com.ssm.po"/>
</typeAliases>
元素的子元素
中的name属性用于指定要被定义别名的包,MyBatis会将所有com.ssm.po包中的POJO类以首字母小写的非限定类名作为它的别名。
注意:上述方式的别名只适用于没有使用注解的情况。如果在程序中使用了注解,那么别名为其注解的值,具体如下。
@Alias(value = "user")
public class User{
//user的属性和方法
}
除了可以使用
元素自定义别名外,MyBatis框架还默认为许多常见的Java类型(如数值、字符串、日期和集合等)提供相应的类型别名,如下表所示。
提示 :
表中所列举的别名可以在MyBatis中直接使用,但由于别名不区分大小写,因此在使用时要注意重复定义的覆盖问题。
MyBatis在预处理语句(Prepared Statement)中设置一个参数或者从结果集(Resultset)中取出一个值时,都会用其框架内部注册了的typeHandler(类型处理器)进行相关处理。typeHandler的作用就是将预处理语句中传入的参数从javaType(Java类型)转换为jdbcType(JDBC类型),或者从数据库取出结果时将jdbcType转换为javaType。
为了方便转换,MyBatis框架提供了一些默认的类型处理器,如下表所示。
当MyBatis框架所提供的这些类型处理器不能够满足需求时,还可以通过自定义的方式对类型处理器进行扩展。自定义类型处理器可以通过实现TypeHandler接口或者继承BaseTypeHandle类来定义。元素就是用于在配置文件中注册自定义的类型处理器的。它的使用方式有两种,具体如下。
(1)注册一个类的类型处理器
<typeHandlers>
<!--以单个类形式配置-->
<typeHandler handler="com.ssm.type.UsertypeHandlerl" />
</typeHandlers>
上述代码中,子元素的handler属性用于指定在程序中自定义的类型处理器类。
(2)注册一个包中所有的类型处理器
<typeHandlers>
<!--注册一个包中所有的typeHandlers,系统在启动时会自动扫描包下的使用文件-->
<package name="com.ssm.type" />
</typeHandlers>
在上述代码中,子元素的name属性用于指定类型处理器所在的包名,使用这种方式后,系统会在启动时自动扫描com.ssm.type包下所有的文件,并把它们作为类型处理器。
MyBatis框架每次创建结果对象的新实例时,都会使用一个对象工厂(ObjectFactory)的实例来完成。MyBatis中默认的ObjectFactory的作用就是实例化目标类,既可以通过默认构造方法实例化,也可以在参数映射存在的时候通过参数构造方法来实例化。
在通常情况下,我们使用默认的ObjectFactory即可。MyBatis中默认的ObjectFactory是由org.apache.ibatis.reflection.factory.DefaultObjectFactory
来提供服务的,大部分场景下都不用配置和修改。如果想覆盖ObjectFactory的默认行为,那么可以通过自定义ObjectFactory实现。
MyBatis允许在已映射语句执行过程中的某一点进行拦截调用(通过插件来实现)。
元素的作用就是配置用户所开发的插件。关于插件的使用,本书不做详细讲解,有兴趣的读者请查找官方文档等资料自行学习。
元素用于在配置文件中对环境进行配置。MyBatis的环境配置实际上就是数据源的配置,可以通过
元素配置多种数据源,即配置多种数据库。
【示例】使用
元素进行环境配置的示例如下。
<environments default="development">
<environment id="development">
<!--使用JDBC的事务管理-->
<transactionManager type="JDBC" />
<!--配置数据源-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/db_mybatis" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
在上述示例代码中,
元素是环境配置的根元素,它包含一个default属性,该属性用于指定默认的环境ID。
是
元素的子元素,它可以被定义多个,其id属性用于表示所定义环境的ID值。在
元素内,包含事务管理和数据源的配置信息,其中
元素用于配置事务管理,它的type属性用于指定事务管理的方式,即使用哪种事务管理器;
元素用于配置数据源,它的type属性用于指定使用哪种数据源。
在MyBatis中,可以配置两种类型的事务管理器,分别是JDBC和MANAGED。
注意:如果项目中使用Spring+MyBatis,就没有必要在MyBatis中配置事务管理器,因为实际开发中会使用Spring自带的管理器来实现事务管理。
对于数据源的配置,MyBatis框架提供了UNPOOLED、POOLED和JNDI三种数据源类型。
在配置文件中,
元素用于指定MyBatis映射文件的位置,一般可以使用以下4种方法引入映射器文件,具体如下所示。
(1)使用类路径引入
<mappers>
<mapper resource="com/ssm/mapper/UserMapper.xml" />
</mappers>
(2)使用本地文件路径引入
<mappers>
<mapper url=file:"///D:/com/ssm/mapper/UserMapper.xml" />
</mappers>
(3)使用接口类引入
<mappers>
<mapper class="com.ssm.mapper.UserMapper" />
</mappers>
(4)使用包名引入
<mappers>
<package name="com.ssm.mapper" />
</mappers>