属性配置(properties)
Mybatis允许在三个地方配置属性
1、使用额外的properties文件,然后再用properties标签的resource属性指定properties文件进行加载。
2、用properties标签的子标签property的name和value配置属性。(优先级最低)
3、在SqSessionlFactoryBuilder的build方法中指定properties对象。(优先级最高)
另外还可以在通过${属性名}的时候指定默认值,
${属性名:默认值}
<properties>
<!--启用默认属性值-->
<property name="org.apache.ibatis.parsing.PropertyParser.enable- default-value" value="true">
<!--更改属性名与默认属性值分隔符为-->
<property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="--">
</properties>
设置配置(settings)
settings的子标签setting有一大堆的name和value属性组合用来更改设置,一般配置setting比较少,因为默认的设置一般比较合理,具体不一一罗列。
类的别名配置(typeAliases)
typeAliases的两个子元素指定别名
子元素typeAlias:
属性type=全限定类名(不需要后缀)
属性alias=指定的任意别名
<typeAliases>
<typeAlias type="全限定类名" alias="别名"/>
</typeAliases>
子元素package
属性name=包名
<typeAliases>
<typeAlias name="包名"/>
</typeAliases>
别名就是类名小写,或者@Alias注解类名
对象工厂配置(objectFactory)
属性type=自定义对象工厂坐标(不需要后缀)
子元素property
<objectFactory type="自定义对象工厂坐标">
<property name="属性名" value"属性值"/>
</objectFactory>
关于自定义对象工厂此处不详细展开
类型处理器(typeHandlers)
<typeHandlers>
<typeHandler handler="类型处理器坐标"/>
</typeHandlers>
关于自定义类处理器具体实现此处不展开
数据库环境配置(environments )
数据库环境配置分为两大块:事务管理器配置、数据源配置
<!--数据库环境分为两大块:事务管理器和数据源-->
<environments default="默认的environment的id">
<environment id="环境id">
<transactoinManager type="事务管理器全限定类名">//JDBC是MyBatis内置别名
<!--事务管理器可能用到的属性-->
<property name="" value="">
</transactoinManager>
<dataSource type="数据源全限定类名"><!--POOLED是MyBatis内置别名-->
<!--下面为数据源提供一些数据库连接的数据,其中name的值为数据源中对应的获取数据信息的方法名对应(set、get方法,例如:name的值为"user",那么在数据源对应的类中获取name对应的方法就是getUser())-->
<property name="username" value="root">
<property name="maxPoolSize" value="50">
<property name="xxxx" value="xxxx">
<property name="xxxx" value="xxxx">
<property name="xxxx" value="xxxx">
</dataSource>
</environment>
</environments>
自定义数据源要自己写类继承UnpooledDataSourceFactory,例如配置C3P0数据源:
public class MyC3P0DataSourceFactory extends UnpooledDataSourceFactory
{
//ComboPooledDataSource是C3P0提供的实现类
this.dataSource = new ComboPooledDataSource();
}
事务管理器也可以自定义,此处不展开
数据库ID配置(databaseIdProvider)
配置数据库id只要是兼容不同的数据库到同一个MyBatis项目中。
比如,两个不同的数据库的select语句写法不同,但是两个select语句的标签ID都是一样的,因为他们处理的业务逻辑相同,其他的都不变,只是两个select用不同的数据库操作,那么我们必须让MyBatis分清楚哪个select语句对应哪个数据库,这个时候就要为select标签指定databaseId属性了。
<select id="query" databaseId="msql">
select * from table_name
</select>
<!--DB_VENDOR为MyBatis内置的数据库别名分配器VendorDatabaseIdProvide-->
<databaseIdProvider type="DB_VENDOR">
<property name="数据库出厂名子串" value="databaseId">
<property name="数据库出厂名子串" value="databaseId">
...
</databaseIdProvider>
数据库别名分配器可以自定义,但是一般没必要,数据库厂商名可以在databaseMetaData中获取
加载Mapper(mappers)
四种配置方式
<mappers>
<mapper resources="xml文件加载路径"/>
<mapper url="xml文件资源的url"/> <!--可以使用file协议-->
<mapper class="Mapper接口文件加载路径"/>
<mapper package="包名"/> <!--加载指定包下的所有Mapper文件-->
</mappers>