(从有道云笔记搬运,博客做备份)
本章官方文档:https://mybatis.org/mybatis-3/zh/configuration.html#environments
目录
- 当前xml
- environments
-
- default
- transactionManager
- dataSource
-
- 池
- properties
- 实验:properties文件和xml标签的内容同时存在
-
- 1.properties对,xml错
- 2.properties错,xml对
- 结论
- xml每行注释整理版
当前xml
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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<!-- &是&的转义,xml里不能写& -->
<!-- useSSL=false,这里必须写false,不然报错 -->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_study?useSSL=false&useUnicode=true&characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="rootroot" />
</dataSource>
</environment>
</environments>
<!-- 每一个xml(mapper)都要在这里注册,和spring类似 -->
<mappers>
<mapper resource="com/study/mybatis/dao/PlayersMapper.xml"/>
</mappers>
</configuration>
environments
environments标签的内容拿下来:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_study?useSSL=false&useUnicode=true&characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="rootroot" />
</dataSource>
</environment>
</environments>
mybatis可以配置多种环境,但是,每个SessionFactory只能选择一种环境。
官方文档:
MyBatis 可以配置成适应多种环境
不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。
default
也就是说,一个enviroment标签是一个sessionFactory,可以有很多个,用哪个,就把default的值改成哪个
default的值,就是enviroment标签的id
transactionManager
transactionManager,事务管理器
有两种:JDBC,MANAGED
JDBC就是java自带的,MANAGED没见过,官方文档是这么解释的:
JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
MANAGED –
这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false来阻止默认的关闭行为。
MANAGED现在用得不多,EJB那一套会和它配,了解即可
注意:如果是用spring+mybatis,则不用配置事务管理器,spring会自己接管。
官方说明:
如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。
dataSource
dataSource,数据源
有三种:UNPOOLED、POOLED、JNDI
UNPOOLED:不用池,很慢,但对性能没什么要求
POOLED:用池,快
JNDI:为EJB做的,现在基本不用了
池
数据库连接池,用完之后不释放,放池里,下次用的时候直接取,省去了初始化连接的时间。
mybatis POOLED官方文档:
避免了创建新的连接实例时所必需的初始化和认证时间
properties
外部配置文件,经常用的,这里直接上代码
新建db.properties,路径和mybatis的xml配置文件一样
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis_study?useSSL=false&useUnicode=true&characterEncoding=UTF-8
username=root
password=rootroot
xml修改
<properties resource="resources/db.properties"></properties>
<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>
(property标签还是要写的,测试的时候给删了,报错了还找了一会= =#)
实验:properties文件和xml标签的内容同时存在
看看哪个能执行成果
1.properties对,xml错
properties文件不动,xml中,在properties标签中加一行:
<properties resource="resources/db.properties">
<property name="password" value="123456" />
</properties>
结果:成功
2.properties错,xml对
把xml中的这一行改一下
<properties resource="resources/db.properties">
<property name="password" value="rootroot" />
</properties>
properties文件修改
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis_study?useSSL=false&useUnicode=true&characterEncoding=UTF-8
username=root
password=111
结果:报错
结论
properties优先级高
xml每行注释整理版
<!-- 用哪个enviroment -->
<environments default="development">
<!-- id -->
<environment id="development">
<!-- 事务管理器,此处是JDBC -->
<transactionManager type="JDBC" />
<!-- 数据源,此处是POOLED -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_study?useSSL=false&useUnicode=true&characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="rootroot" />
</dataSource>
</environment>
</environments>