「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战」
1、全局配置文件详解
在上一篇文章中,resource文件夹下有一个mybatis-config.xml的配置文件,这个配置文件是mybatis的全局配置文件,用来进行相关的全局配置,在任何操作下都生效的配置。
1.0 官方说明
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:
1.1 configuration(配置)
<?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">
<!--就是!DOCTYPE后面对应的根节点 即为该文档的文档类型-->
<configuration>
</configuration>
mapper.xml文件中,DOCTYPE 后面是 mapper。
1.1.1 properties(属性)
此属性用来引用外部源文件。源文件目录为:
db.properties内容为:
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/dev
mysql.username=root
mysql.password=123456
配置信息为:
<!--配置外部属性资源文件 通过${}进行引用-->
<properties resource="db.properties">
<!--可以在定义内部的属性 引用方式是一样的
<property name="mysql.username" value="root"/>
-->
</properties>
1.1.2 settings(设置)
mybatis的设置选项 可以改变mybatis运行时行为,内容过多且不重要,具体可以参考官方文档: mybatis – MyBatis 3 | 配置
1.1.3 typeAliases(类型别名)
<!--类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写-->
<typeAliases>
<!--根据包设置包里面所有的类的别名 :会将类的名字作为别名(忽略大小写)
还可以为包里面的类单独设置个性别名:@Alias (默认的以类的名字作为别名就会失效)
除了可以设置自定义的类的别名以为,mybatis还内置很多常见类型的别名
-->
<package name="cn.zhl.entity"/>
</typeAliases>
配置了 typeAliases ,mapper.xml中的 resultType 就不必写全限定类名了。
如果在实体类上配置了@Alias,那么mapper.xml中的 resultType 必须设置为 @Alias的值。
1.1.4 environments(环境配置)和 environment
<!-- environments 可以多个环境:
default 默认的数据库环境
-->
<environments default="development">
<!--environment 配置数据库环境 id 指定当前数据库环境的唯一表示, 会被父节点default所设置-->
<environment id="development">
<!--事务管理器 类型
type = JDBC 使用jdbc的事务管理
MANAGED 不运用事务
-->
<transactionManager type="JDBC"/>
<!--数据源
type 指定连接池
POOLED 指定使用mybatis的连接池
UNPOOLED 不使用连接池
JNDI JNDI连接池 可以在tomcat中使用
-->
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
1.1.5 databaseIdProvider(数据库厂商标识)
<!-- 数据库厂商标识:mybatis提供用于跨数据库平台,用于根据不同的数据库调用不同SQL
type="DB_VENDOR" 利用数据库的厂商名称来区分
步骤:
1.为需要跨越数据库设置不同的厂商名称
2.编写不同的SQL databaseId必须登录厂商的value
-->
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
</databaseIdProvider>
此时mapper.xml中sql如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhl.mapper.UserInfoMapper">
<!--根据id查询UserInfo实体-->
<select id="selectUser" resultType="com.zhl.entity.UserInfo" databaseId="mysql">
select * from user_info where uid = #{id}
</select>
<select id="selectUser" resultType="com.zhl.entity.UserInfo" databaseId="oracle">
select * from user_info where uid = #{id}
</select>
</mapper>
通过匹配不同的 databaseId 进行跨数据库平台。
1.1.6 mappers(映射器)
<!--设置映射器-->
<mappers>
<!--4种映射方式
1.<mapper resource 设置MapperXml 这种方式适用根据statementId进行操作
2.<mapper class 设置Mapper接口 这种方式适用接口绑定的方式和注解
3.<mapper url 使用磁盘的绝对路径(基本不用)
4.<package 根据包设置包下面所有的Mapper接口, 这种方式适用接口绑定的方式和注解
-->
<!--<mapper resource="EmpMapper.xml"/>-->
<!--<mapper class="cn.tulingxueyuan.mapper.EmpMapper"></mapper>-->
<package name="cn.zhl.mapper"/>
</mappers>
package的方式,可以避免设置多个mapper标签。