学习一个框架,必须详细的了解其配置文件,并通过一定的源码分析才能更灵活的运用,根据自己的项目实现一些特殊的、自定义的功能,下面详细看看Mybatis的全局配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 配置里面用到大写的字符串常量,都在Mybatis在给特定的类启的别名,可以在org.apache.ibatis.session.Configuration的构造函数中找到 -->
<configuration>
<!-- properties标签:定义外部配置文件,比如数据库配置
resource:类路径下的配置文件
url:网络路径或者磁盘路径下的配置文件
-->
<properties resource="jdbc.properties" ></properties>
<!--
该标签包含了很多重要的配置,比如缓存等
-->
<settings>
<!-- mapUnderScoreToCamelCase:数据库字段中的下划线加其后的第一字母读取出来后去掉下划线并字母大写,如:first_name变成firstName -->
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
<!-- 类型与别名映射 -->
<typeAliases>
<!-- package和typeAlias标签只能同时存在一个 -->
<!-- package标签:将包及其子包下面所有的类全部映射为类名小写的别名,如果存在冲突的别名,在java类中使用@alias注解换一个别名 -->
<!-- <package name=""/> -->
<!-- typeAlias标签:将一个类名映射为别名 -->
<typeAlias type="com.jv.bean.Employee" alias="employee"/>
</typeAliases>
<!--
environments:环境们,Mybatis可以配置多种环境 ,default属性指定使用某种环境。可以达到快速切换环境。
比如同一套代码的开发环境、测试环境、生产环境,甚至还有不同类型的数据库
下面的配置没有针对使用场景来配置,而是为了测试Mybatis对不同类型数据库支持,配置了两种场景,分别是Oracle和MySQL
-->
<environments default="dev_oracle">
<!--
environment:配置一个具体的环境信息;必须有两个标签;id代表当前环境的唯一标识
-->
<environment id="dev_mysql">
<!--
transactionManager:事务管理器;
type:事务管理器的类型;JDBC(JdbcTransactionFactory)|MANAGED(ManagedTransactionFactory)
自定义事务管理器:实现TransactionFactory接口.type指定为全类名
-->
<transactionManager type="JDBC" />
<!--
dataSource:数据源;
type:数据源类型;UNPOOLED(UnpooledDataSourceFactory)
|POOLED(PooledDataSourceFactory)
|JNDI(JndiDataSourceFactory)
自定义数据源:实现DataSourceFactory接口,type是全类名
-->
<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>
<!-- 这个环境配置为oracle -->
<environment id="dev_oracle">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${ora.driver}" />
<property name="url" value="${ora.url}" />
<property name="username" value="${ora.username}" />
<property name="password" value="${ora.password}" />
</dataSource>
</environment>
</environments>
<!--
databaseIdProvider:支持多数据库厂商的;
type="DB_VENDOR":VendorDatabaseIdProvider是DB_VENDOR映射的实现类
作用:就是得到数据库厂商的标识,调用getDatabaseProductName()得到数据库名称,如Oracle(MySQL,SQL Server等其他名字)然后和配置中property比对,拿
到oracle,在与sql映射文件中<select>标签中的databaseid中的值匹配,Mybatis就能根据数据库厂商标识来执行不同的sql;
-->
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
</databaseIdProvider>
<!-- 将配置的SQL映射文件配置到全局配置文件中 -->
<mappers>
<!--
注册一个SQL映射文件到全局配置文件中
1.注册配置文件
resource:类路径下的配置文件
url:网络路径或者磁盘路径下的配置文件
-->
<mapper resource="EmployeeMapper.xml" />
<!--
注册接口
1.必须将SQL映射配置文件放到接口类相同的目录,这样Mybatis才能根据Mapper的名字找到对应的SQL映射文件
或者
2.不使用SQL映射文件,在类中使用注解把SQL写到对应方法上
如:
public interface EmployeeMapperAnnotation{
@select("select * from employee where id = #{id}")
public Employee getEmployeeById(Integer id);
}
-->
<mapper class="com.jv.dao.EmployeeMapper" />
<!--
批量注册,为了方便维护,通常开发人员喜欢讲配置文件和类分开,但是分开了就不能使用该功能,有一个比较讨巧的做法
在新建的配置文件根目录下,创建一个和类一样的目录,最终通过编译打包后配置文件和CLASS文件是在同一个目录的
-->
<package name="com.jv.dao.batch"/>
</mappers>
</configuration>
因为mybatis经常和其他框架整合,因此在全局配置文件里面用到<properties>和<datasource>标签几率很少
<settings>标签里面包含了很多重要的属性,在不断学习中会陆续介绍,最后会单独列一篇做汇总
<typeAliases>标签的配置很实用,比如经常实用的实体类如果有更新位置或者类名,那么使用别名就像常量一样方便,但是它也有不好的一面,即在阅读代码的时候,如果想通过mapper配置文件快速定位到类,就比如去全局配置文件翻具体的类。
另外:别名千万不要和Mybatis内定的别名冲突,即基本类型和常用类型的:
来源:oschina
链接:https://my.oschina.net/u/3049601/blog/1609032