主配置文件可以随意命名,其主要完成以下几个功能:
- 注册DB连接四要素的属性文件
- 注册实体类的全限定类名的别名
- 配置MyBatis运行环境,即数据源与事务管理器
- 注册SQL映射文件
1、注册属性文件
在标签<configuuration>选中时,F2可查看其描述信息,也可查看其子标签。
利用<properties>标签可以注册属性文件。
注册完成以后,在主配置文件中就可以使用${ }来获取属性文件中相应的value。
2、配置实体类的别名
如果在需要使用全限定类名的时候,一直使用全限定类名,那样就显得繁琐,比如后面要展示的查询所有数据,再比如指定一个SQL语句的返回值类型。此时就可以使用指定别名的方式来代替全限定类名。
对于实体类的全限定类名的别名的指定方式,有两种:
- 使用<package>方式(推荐)
- 使用<typeAlias>方式
一般使用<package>方式。这样做的好处是会将该包中的所有实体类的简单类名指定为别名,写法较简单方便。
<typeAliases> <!-- 指定包,包中的类的简单类名作为别名 --> <package name="com.wisver.beans" /> </typeAliases>
而通过<typeAlias>指定时,标签的属性type的值就是全限定类名,alias的值就是类的别名。
该方式的好处是可以指定任意名称为类的别名,弊端是,必须要逐个指定,当要起别名的类比较多时,就会比较繁琐。
< typeAliases> <!-- typeAlias一行定义一个对象的别名,别名可自定义 --> <typeAlias type="com.wisver.beans.Student" alias=”stu” /> </typeAliases>
3、配置MyBatis运行环境
<!-- 引用某个数据库的连接作为 MyBatis 的连接 --> <environments default="mysql"> <!-- 配置数据库连接 可以有多个配置 ,如果有多个配置那么id不能重复 --> <environment id="mysql"> <!-- 事务管理器 采用JDBC管理事务 --> <transactionManager type="JDBC" /> <!-- 配置数据源 连接数据库 POOLED 连接池 采用连接池技术管理数据库连接 或 JNDI采用JNDI管理连接 --> <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>
3.1 <environments>标签
在<environments>中可以包含多个运行环境<environment>,但其default属性指定了当前MyBatis运行时所选择使用的环境。
<environment>的id属性为当前定义的运行环境的名称,可以任意命名。该名称会作为<environments>的default属性的值出现。
3.2 <transactionManager>标签
<transactionManager type="JDBC"/>
该标签用于指定MyBatis所使用的事务管理器。MyBatis支持两种事务管理器类型:JDBC和MANAGED。
JDBC:使用JDBC的事务管理机制。即通过Connection的commit()方法提交,通过rollback()方法回滚。但默认情况下,MyBatis将自动提交功能关闭了,改为了手动提交。即程序中需要显式的对事物进行提交或回滚。
MANAGED:由容器来管理事务的整个生命周期(如Spring容器)。
3.3 <dataSource >标签该标签用于配置MyBatis使用的数据源类型与数据库连接基本属性。常见类型有:UNPOOLED、POOLED、INDI等。
- UNPOOLED:不使用连接池。即每次请求,都会为其创建一个DB连接,使用完毕,会马上将此连接关闭。
- POOLED:使用数据库连接池来维护连接。
- INDI:数据源可以定义到应用的外部,通过INDI容器获取数据库连接。
4、注册SQL映射文件
指定映射文件的方式有多种,但是所有的方式都是在<mappers>标签中指定的。
- 通过<package name=” ”/>指定映射文件
- 通过<mapper resourse=””/>指定映射文件
- 通过<mapper class=” ”/>指定映射文件 (了解即可)
- 通过<mapper url=””/>来指定映射文件(了解即可)
4.1 <package name=""/>
当映射文件较多时,可以使用这种形式来指定。其中package的name属性指定映射文件所存放的包。
这种方式的使用需要满足一下几个条件:(同名同包全限定外加动态代理)
- 映射文件要与Dao接口名称相同
- 映射文件要与接口在同一包中
- 映射文件中<mapper>的namespace属性值为Dao接口的全限定类名。
- dao使用mapper动态代理实现
这种情况下,有几个映射文件就需要写几个mapper标签,如:
<mappers> <mapper resource="com/learn/c_primary/dao/IStudentDao-mapper.xml"/> <mapper resource="com/learn/c_primary/dao/IStudentDao-mapper2.xml"/> </mappers>
4.3 <mapper class=” ”/>
class属性的值时Dao接口的全限定类名。
这种方式的使用,需要满足以下几个要求:(同名同包全限定)
- 映射文件名要与Dao接口名称相同。
- 映射文件要与接口在同一包中。
- 映射文件中<mapper>的namespace属性值为Dao接口的全限定类名。
这种方式的好处是:可以将映射文件放在本地或网络的任意位置,通过其url地址即可直接访问。但通常映射文件是存放在当前应用中的,所以该方式不常用。