一、配置文档的顶层结构
configuration(配置)
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- environment(环境变量)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
二、properties(属性)
properties属性配置有三种方式:
方式一:在 properties 元素体内指定的属性配置数据库参数
配置文件SqlMapConfig.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">
<configuration>
<!--properties:可以在标签内部配置连接数据库的信息。也可以通过属性引用外部配置文件信息-->
<properties>
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=true&useUnicode=true&characterEncoding=utf8"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</properties>
<!--配置环境-->
<environments default="mysql">
<!--配置mysql的环境-->
<environment id="mysql">
<!--配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源-->
<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>
<!--配置映射文件的位置-->
<mappers>
<mapper resource="com/wedu/mybatis07/dao/IUserDao.xml"/>
</mappers>
</configuration>
方式二:根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件
数据库连接信息jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useSSL=true&useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456
配置文件SqlMapConfig.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">
<configuration>
<!--resource属性:用于指定配置文件的位置,是按照类路径的写法来写,并且必须存在于类路径下。-->
<properties resource="jdbc.properties"/>
<!--配置环境-->
<environments default="mysql">
<!--配置mysql的环境-->
<environment id="mysql">
<!--配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源-->
<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>
<!--配置映射文件的位置-->
<mappers>
<mapper resource="com/wedu/mybatis07/dao/IUserDao.xml"/>
</mappers>
</configuration>
注意:properties文件中两个不同参数之间的间隔符是“&”不是“&” 。
方式三:读取作为方法参数传递的属性
数据库连接信息jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useSSL=true&useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456
配置文件SqlMapConfig.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">
<configuration>
<!--配置环境-->
<environments default="mysql">
<!--配置mysql的环境-->
<environment id="mysql">
<!--配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源-->
<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>
<!--配置映射文件的位置-->
<mappers>
<mapper resource="com/wedu/mybatis07/dao/IUserDao.xml"/>
</mappers>
</configuration>
程序代码方式传递参数
public static SqlSession getSqlSession(){
SqlSession session = null;
try {
// 加载数据库配置文件
Properties properties = new Properties();
properties.load(Resources.getResourceAsStream("jdbc.properties"));
// 加载mybatis的配置文件
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("SqlMapConfig.xml"), properties);
return sessionFactory.openSession();
} catch (IOException e) {
e.printStackTrace();
throw ExceptionFactory.wrapException("Error building SqlSession.", e);
}
}
注意:如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:
- 在 properties 元素体内指定的属性首先被读取。
- 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
- 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。
因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的是 properties 属性中指定的属性。
三、settings(设置)
1、cacheEnabled:二级缓存配置
<!--配置全局变量-->
<settings>
<!--cacheEnabled:全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存。-->
<setting name="cacheEnabled" value="true"/>
</settings>
2、lazyLoadingEnabled:延迟加载配置
<!--配置全局变量-->
<settings>
<!--lazyLoadingEnabled:延迟加载的全局开关-->
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
3、aggressiveLazyLoading:延迟加载配置
<!--配置全局变量-->
<settings>
<!--aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。 否则,每个属性会按需加载-->
<setting name="aggressiveLazyLoading" value="false"/>
</settings
四、typeAliases(类型别名)
设置别名方式一:使用typeAlias配置别名
<!--配置别名-->
<typeAliases>
<!--typeAlias用于配置别名。type属性指定的是实体类全限定类名。alias属性指定别名,当指定了别名就不再区分大小写-->
<typeAlias type="com.wedu.mybatis07.domain.User" alias="user"/>
</typeAliases>
配置别名的方式二:使用package配置别名
<!--配置别名-->
<typeAliases>
<!-- 用于指定要配置别名的包,当指定之后,该包下的实体类都会注册别名,并且类名就是别名,不再区分大小写-->
<package name="com.wedu.mybatis07.domain"/>
</typeAliases>
五、environments(环境配置)
1、配置环境的注意点
- 默认使用的环境 ID(比如:default="development")。
- 每个 environment 元素定义的环境 ID(比如:id="development")。
- 事务管理器的配置(比如:type="JDBC")。
- 数据源的配置(比如:type="POOLED")。
2、三种数据源类型
- UNPOOLED: 这个数据源的实现只是每次被请求时打开和关闭连接。虽然有点慢,但对于在数据库连接可用性方面没有太高要求的简单应用程序来说,是一个很好的选择。
- POOLED: 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这是一种使得并发 Web 应用快速响应请求的流行处理方式。
- JNDI :这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。
六、mappers(映射器)
配置映射器的三种方式
方式一:使用相对于类路径的资源引用
<!--配置映射文件的位置-->
<mappers>
<!-- 使用相对于类路径的资源引用 -->
<mapper resource="com/wedu/mybatis07/dao/IUserDao.xml"/>
</mappers>
方式二: 使用映射器接口实现类的完全限定类名
<!--配置映射文件的位置-->
<mappers>
<!-- 使用映射器接口实现类的完全限定类名 -->
<mapper class="com.wedu.mybatis02.dao.IUserDao"/>
</mappers>
方式三:将包内的映射器接口实现全部注册为映射器
<!-- 配置映射文件的位置 -->
<mappers>
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<package name="com.itheima.dao"></package>
</mappers>
注:参照mybatis官方文档:https://mybatis.org/mybatis-3/zh/sqlmap-xml.html