MyBatis核心配置文件详解
一、Environments标签
1.Environment标签详解
<?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 说明该 XML 文件的根,xxx.dtd 文件是 XML 对应的规范,用来说明该 XML 文件可以使用那些标签 -->
<configuration>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/> <!-- 日志设置为 MyBatis 提供的标准日志 -->
</settings>
<!-- default 表示默认使用的环境 -->
<!-- 默认环境是什么?当使用 mybatis 创建 SqlSessionFactory 对象的时候,没有指定环境的话,默认使用那个环境 -->
<environments default="development">
<!-- 一般一个数据库会对应一个SqlSessionFactory对象。-->
<!-- 一个环境 environment 会对应一个 SqlSessionFactory 对象-->
<environment id="development">
<transactionManager type="JDBC"/> <!-- 事务管理设置为 JDBC 默认开启事务,需要手动提交 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/使用的数据库名"/>
<property name="username" value="用户名"/>
<property name="password" value="用户名对应的密码"/>
</dataSource>
</environment>
<!-- 这是mybatis的另一个环境,也就是链接的数据库是另一个数据库mybatis-->
<environment id="test">
<transactionManager type="JDBC"/> <!-- 事务管理设置为 JDBC 默认开启事务,需要手动提交 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/使用的数据库名"/>
<property name="username" value="用户名"/>
<property name="password" value="用户名对应的密码"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--sql映射⽂件创建好之后,需要将该⽂件路径配置到这⾥-->
<mapper resource="articleMapper.xml"/>
</mappers>
</configuration>
(1)如何创建对应环境的 SqlSessionFactory对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//这种方式创建的是默认环境的sqlSessionFactory
SqlSessionFactory sqlSessionFactory1 = builder.build(Resources.getResourceAsStream("mybatis-config.xml"));
//这种方式创建的是指定环境的sqlSessionFactory
SqlSessionFactory sqlSessionFactory2 = builder.build(Resources.getResourceAsStream("mybatis-config.xml"), "test");
2.transactionManager标签详解
- 这个标签是用来配置事务管理器的,用来指定具体采用什么方式来管理事务的。
- 关于这个标签的详细知识可以参考我的博客 ===> MyBatis概述与MyBatis入门程序 中的 MyBatis事务管理深度剖析部分。
3.dataSource标签详解
<?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 说明该 XML 文件的根,xxx.dtd 文件是 XML 对应的规范,用来说明该 XML 文件可以使用那些标签 -->
<configuration>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/> <!-- 日志设置为 MyBatis 提供的标准日志 -->
</settings>
<!-- default 表示默认使用的环境 -->
<!-- 默认环境是什么?当使用 mybatis 创建 SqlSessionFactory 对象的时候,没有指定环境的话,默认使用那个环境 -->
<environments default="development">
<!-- 一般一个数据库会对应一个SqlSessionFactory对象。-->
<!-- 一个环境 environment 会对应一个 SqlSessionFactory 对象-->
<environment id="development">
<transactionManager type="JDBC"/> <!-- 事务管理设置为 JDBC 默认开启事务,需要手动提交 -->
<!--
1.dataSource 被称为数据源
2.dataSource 的作用是:为程序提供 Connection 对象。(但凡是给程序提供 Connection 对象的,都叫做数据源)
3.数据源实际上是一套规范。JDK 中有这套规范:javax.sql.DataSource(这个数据源的规范,这套接口实际上是 JDK 规定的)
4.我们自己也可以编写数据源组件,只要实现 Javax.sql.DataSource 接口就行了。实现接口当中的所有方法。这样就有了自己的数据怨怒。(数据库连接池是提供连接对象的,所有数据库连接池就是一个数据源)
5.常见的连接池有:
阿里巴巴的德鲁伊连接池:druid
c3p0
dbcp
...
6.type 属性用来指定数据源的类型,就是指定具体使用什么方式来获取 Connection 对象。
type 属性有三个值,必须是三选一
type= "[UNPOOLED | POOLED | JNDI]"
UNPOOLED: 不使用数据库连接池技术。每一次请求过来之后,都是创建新的 Connection 对象。
POOLED: 使用 mybatis 自己实现的数据库连接池。
JNDI: 集成第三方的数据库连接池。
JNDI 是一套规范。大部分 Web 容器都实现了 JNDI 规范。
例如:Tomcat、Jetty、WebLogic、WebSphere.
JNDI:是Java命名目录接口。
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/springboot-blog"/>
<property name="username" value="root"/>
<property name="password" value="GDB20031104!"/>
</dataSource>
</environment>
<!-- 这是mybatis的另一个环境,也就是链接的数据库是另一个数据库mybatis-->
<environment id="test">
<transactionManager type="JDBC"/> <!-- 事务管理设置为 JDBC 默认开启事务,需要手动提交 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/springboot-blog"/>
<property name="username" value="root"/>
<property name="password" value="GDB20031104!"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--sql映射⽂件创建好之后,需要将该⽂件路径配置到这⾥-->
<mapper resource="articleMapper.xml"/>
</mappers>
</configuration>
- 注意:关于 type 属性的值不同,则每个属性可以使用的子标签不同,大家可以参考官方文档。 ===> mybatis中文网
(1)UNPOOLED
(2)POOLED
- 提醒:正常使用连接池的话,池中有很多参数是需要设置的。设置好参数,可以让连接池发挥的更好。事半功倍的效果。
- 具体连接池当中的参数如何配置呢?需要反复的根据当前业务情况进行测试。
(3)JDNI
二、properties标签
- 这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。
1.property标签
<?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>
<property name="jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="jdbc.url" value="jdbc:mysql://localhost:3306/springboot-blog"/>
</properties>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="root"/>
<property name="password" value="GDB20031104!"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--sql映射⽂件创建好之后,需要将该⽂件路径配置到这⾥-->
<mapper resource="articleMapper.xml"/>
</mappers>
</configuration>
2.properties 属性配置文件
(1)xxx.properties属性配置文件
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springboot-blog
jdbc.username=root
jdbc.password=GDB20031104!
(2)mybatis-config.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 resource="jdbc.properties"> // 从根路径下引入属性配置文件
</properties>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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="articleMapper.xml"/>
</mappers>
</configuration>
(3)配置文件的优先级
- 如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:
- 首先读取在 properties 元素体内指定的属性。
- 然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
- 最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
- 因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的则是 properties 元素中指定的属性。
- 其中的 url 属性是使用绝对路径的方式来获取属性配置文件的。