4.1 概述
配置文件所有元素如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 配置 -->
<properties/><!-- 属性 -->
<settings/><!-- 设置 -->
<typeAliases/><!-- 类型命名 -->
<typeHandlers/><!-- 类型处理器 -->
<objectFactory/><!-- 对象工厂 -->
<plugins/><!-- 插件 -->
<environments><!-- 配置环境 -->
<environment><!-- 环境变量 -->
<transactionManager/><!-- 事务管理器 -->
<dataSource/><!-- 数据源 -->
</environment>
</environments>
<databaseIdProvider/><!-- 数据库厂商标识 -->
<mappers/><!-- 映射器 -->
</configuration>
注意:
- MyBatis配置项的顺序不能颠倒,否则发生异常
- 常用内容:
- properties
- settings
- typeAliases
- typeHandler
- plugin
- environments
- mapper
4.2 properties 属性
properties属性可以给系统配置一些运行参数,可以放在XML文件或者properties文件中
不放在Java编码中
使用方式:
- property 子元素
- properties 文件
- 程序代码传递
4.2.1 property 子元素
<properties>
<property name="database.driver" value="com.mysql.jdbc.Driver"/>
<property name="database.url" value="jdbc:mysql://localhost:3306/ssm"/>
<property name="database.username" value="root"/>
<property name="database.password" value="root123"/>
</properties>
<?xml version="1.0" encoding="UTF-8"?>
<properties>
<property name="database.driver" value="com.mysql.jdbc.Driver"/>
<property name="database.url" value="jdbc:mysql://localhost:3306/ssm"/>
<property name="database.username" value="root"/>
<property name="database.password" value="root123"/>
</properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${database.driver}"/>
<property name=url"" value="${database.url}"/>
<property name="username" value="${database.username}"/>
<property name="password" value="${database.password}"/>
</dataSource>
</environment>
</environments>
4.2.2 使用properties文件
在MyBatis中通过 properties 的属性 resource来引入properties文件
<prpperties resource="jdbc.properties"/>
也可以按${database.username}的方法引入properties文件的属性参数到MyBatis配置文件中。这个时候通过维护properties文件就可以维护我们的配置内容了
4.2.3 使用程序传递方法传递参数
可以对用户名和密码进行解密和加密
settings 设置
settings设置可以深刻影响MyBatis底层的运行,在大部分情况下使用默认值即可
常用配置包括:
- 关于缓存的cacheEnabled
- 关于级联的lazyLoadingEnabled和aggressiveLazyLoading
- 关于自动映射的autoMappingBehavior和mapUnderscoreToCamelCase
- 关于执行器类型的defaultExecutorType
4.4 typeAliases别名
类的全限定名称很长,在MyBatis中允许定义一个简写来代表这个类,使用typeAliases来配置
4.4.1 系统定义别名
4.4.2 自定义别名
- 使用配置文件自定义
<typeAliases>
<typeAlias alias="student" type="com.ssm.chapter4.pojo.Student"/>
</typeAliases>
- 扫描方式自定义
<typeAliases>
<package name="com.ssm.chapter4.pojo"/>
</typeAliases>
这样MyBatis将扫描这个包里的类,将其第一个字母变为小写作为其别名
为防止出现重名,可以使用MyBatis提供的注解@Alias(”别名“)进行区分
4.5 typeHandler 类型转换器
在typeHandler中,分为jdbcType和javaType
- jdbcType:定义数据库类型
- javaType:定义Java类型
- typeHandler作用为承担jdbcType和javaType之间的相互转换
在大部分情况下哎无须显式地声明jdbcType和javaType
也可以自动一typeHandler
4.6 ObjectFactory(对象工厂)
当创建结果集时,MyBatis会使用一个对象工厂来完成创建这个结果集实例。在默认的情况下,MyBatis会使用其定义的对象工厂——DefaultObjectFactory来完成对应的工作
MyBatis同样允许注册自定义的ObjectFactory
4.7 插件
4.8 environments(运行环境)
运行环境主要的作用是配置数据库信息,可以配置多个数据库
它下面又分为两个可配置的元素:事务管理器(transactionManager)、数据源(dataSource)
在实际的工作中,大部分情况下会采用Spring对数据源和数据库的事务进行管理
4.8.1 transactionManager(事务管理器)
MyBatis提供两个实现类:
- jdbcTransaction
- ManagedTransaction
于是可以把事务管理器配置成为以下两种方式:
<transactionManager type="JDBC"/>
<transactionManager type="MANAGED"/>
- JDBC以JDBC的方式对数据库的提交和回滚进行操作
- MANAGED的提交和回滚方法不用任何操作,而是把事务交给容器处理,默认下,会关闭连接
4.8.2 environment 数据源环境
environment主要作用是配置数据源
3种配置方式:
<dataSource type="UNPOOLED">
<dataSource type="POOLED">
<dataSource type="JNDI">
- UNPOOLED
采用非数据库池的管理方式,每次请求都会打开一个新的数据库连接,所以创建比较慢
在一些对性能没有很高的要求的场合可以使用它 - POOLED
数据源POOLED利用“池”的概念将JDBC的Connection对象组织起来,开始会有一些空置,并且已经连接号的数据库连接,请求时,无需再建立和验证,省去了创建新的连接实例时所必需的初始化和认证时间
还控制最大连接诶书,避免过多连接导致系统瓶颈 - JNDI
4.9 dataBaseIdProvider 数据库厂商标识
主要是支持多种不同厂商的数据库
<databaseIdProvider type="DB_VENDOR">
<property name="Oracle" value="oracle"/>
<property name="MySQL" value="mysql"/>
<property name="DB2" value="db2"/>
</databaseIdProvider>
4.10 引入映射器的方法
映射器定义命名空间(namespace)的方法,命名空间对应的是一个接口的全路径,而不是实现类
- 用文件路径引入映射器
<mappers>
<mapper resource="com/ssm/chapter4/mapper/studentMapper.xml"/>
</mappers>
- 用包名引入映射器
<mappers>
<package name="com.ssm.chapter4.mapper"/>
</mappers>
- 用类注册引入映射器
<mappers>
<mapper class="com.ssm.chapter4.mapper.studentMapper"/>
</mappers>
- 用userMapper.xml引入映射器
<mappers>
<mapper url="file:///var/mappers/ssm/chapter4/mapper/studentMapper.xml"/>
</mappers>