首先看看我曾经写过的一份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">
<configuration>
<properties resource="db/mysqlconn.properties"></properties>
<!-- 开启懒加载 -->
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
<!-- 将other转为null值 -->
<setting name="jdbcTypeForNull" value="NULL"/><!-- 不设置这个参数的话有一些数据库不能识别null,如oracle数据库 -->
<!-- 指定日志为log4j -->
<setting name="logImpl" value="LOG4J"/>
<!-- 开启二级缓存 -->
<setting name="cacheEnabled" value="true"/>
</settings>
<typeAliases>
<package name="pojo" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<package name="mapper" />
</mappers>
</configuration>
这个是和它相关的.properties文件的内容
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///t18321
username=root
password=admin123
开始解析整个配置文件
1. xml文件的命名
首先每个框架的配置文件基本上都有一些默认的名字规范,例如springframework的配置文件就经常被叫做“applicationContext-*.xml”,mybatis的配置文件一般就叫做“configuration.xml”,当然这些文件的名字是可以随便取的,看个人喜好
2. xml文件的报文头
其次每个框架的xml文件都有报文头,如:
<?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">
(1)第一个是XML的声明,其中version属性是必须写的。
(2)encoding属性的值表示用于读取文档的字符集
3. mybatis配置文件的根元素
<configuration>
......
</configuration>
这个标签是一定要有的
4. properties标签
<properties resource="db/mysqlconn.properties"></properties>
该标签用于引入.properties文件,一般.properties文件里放的都是数据库的一些连接信息(用户名,密码,driverclass),该文件内容也是key-value形式
5. setting标签
<settings>
...
</settings>
该标签就是用来修改mybatis的一些属性(全局参数)设置的,具体属性参考一下下面
<settings>
<!-- 开启懒加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
<!-- 将other转为null值 -->
<setting name="jdbcTypeForNull" value="NULL"/><!-- 不设置这个参数的话有一些数据库不能识别null,如oracle数据库 -->
<!-- 指定日志为log4j -->
<setting name="logImpl" value="LOG4J"/>
<!-- 开启二级缓存 -->
<setting name="cacheEnabled" value="true"/>
</settings>
6. typeAliases标签
<typeAliases>
<package name="包路径" />
<!-- <typeAlias type="要操作的类的路径" alias="别名"/> -->
</typeAliases>
给完整的类其别名,简化类的应用。
类型别名是Java类型的简称。
当然,框架内置了一些常见的别名,如下:
7. environments标签
<environments default="development_orac">
<environment id="development_orac">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${or_driver}" /><!-- ${
.properties文件中的key} -->
<property name="url" value="${or_url}" />
<property name="username" value="${or_username}" />
<property name="password" value="${or_password}" />
</dataSource>
</environment>
</environments>
每个数据库对应一个SqlSessionFactory 实例。并且通过sqlsession来对数据库进行相关的CRUD操作
你可以在“environments”配置多个environment,但是在后续使用时必须指定一个environment
即虽然可以配置多个运行环境,但是每个SqlSessionFactory 实例只能选择一个运行环境。
因此,如果同时想连接两个数据库那你就必须有两个对应的environment,并且你必须在databaseIdProvider 标签中给每个数据库去一个name值来对应,如下所示
<environments default="development_orac">
<environment id="development_orac">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${or_driver}" />
<property name="url" value="${or_url}" />
<property name="username" value="${or_username}" />
<property name="password" value="${or_password}" />
</dataSource>
</environment>
<environment id="development_mysql">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<databaseIdProvider type="DB_VENDOR">
<!-- name参照源数据 -->
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
</databaseIdProvider>
当你配置了多个environment时,在mapper.xml文件必须指定一个你在databaseIdProvider标签中的name,如下:
<select id="xxx" resultType="xxx" databaseId="你定义的name">
</select>
通过databaseId来指定具体的environment
8.mapper标签
<!--
mappers:代表你mybatis所引用的映射文件
-->
<!-- mapper代表一个具体映射文件
resource:代表这个映射文件的资源路径
-->
<!-- 配置转换器 -->
<mappers>
<!-- 注册映射接口 -->
<!-- <mapper class="mapper.StudentMapper2"/>
<mapper class="mapper.StudentMapper"/> -->
<!-- <mapper resource="mapper/StudentMapper.xml" /> -->
<package name="mapper"/>
</mappers>
注册映射接口的xml文件。告诉这个mybatis框架 在哪里能够找到我们定义的映射SQL 语句,
可以使用类资源路径或者URL
注意
mybatis的配置文件的标签都是有顺序的不能乱写
参照以下顺序:
properties,
settings,
typeAliases,
typeHandlers,
objectFactory,
objectWrapperFactory,
reflectorFactory,
plugins,
environments,
databaseIdProvider,
mappers.