核心配置文件
<?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
根标记–只能有一个
dtd
约束 规定可以出现的标签、标签的顺序、属性、属性的值
4.1environment
<!-- default表示默认使用的环境-->
<environments default="powernodeDB">
<!--其中的一个环境,连接的数据库是powernode-->
<!-- 一般一个环境environment会对应一个SqlSessionFactory对象
-->
<environment id="powernodeDB">
测试
@Test
public void testEnvironment() throws Exception {
//获取SqlSessionFactory对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//采用默认的方式获取
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
//通过环境id来使用指定的环境
SqlSessionFactory sqlSessionFactory1 = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"),"powernodeDB");
}
4.2transactionManager
<!--事务管理器-->
<!--
transactionManager标签:
1.作用:配置事务管理器,指定mybatis具体使用什么方式去管理事务
2.type属性有两个值:
JDBC:使用原生JDBC代码来管理事务
conn.setAutoCommit(false);
...
conn.commit();
MANAGED,mybatis不再负责事务的管理,将事务管理交给其他的JEE(JavaEE)容器来管理_spring
3.不区分大小写
4.在mybatis中提供了一个事务管理器的接口:Transaction对象
该接口下有两个实现类:
JdbcTransaction
MANAGEDTransaction
-->
<transactionManager type="JDBC"/>
4.3dataSource(数据源)
dataSource配置:
1.数据源
2.作用
为程序提供Connection对象【只要是给程序提供Connection对象的都叫数据源】
3.数据源实际上是一套规范,是JDK规定的:javax.sql.DataSource
4.只要实现javax.sql.DataSource接口中所有的方法,就可以连接自己的数据源
数据库连接池是提供连接对象的,所以它就是一个数据源
5.常见的数据源组件:
阿里巴巴的德鲁伊连接池:druid
c3p0
dbcp
...
6.type属性指定数据源类型(即指定使用什么方式来获取Connection对象)
type属性有三个值:
UNPOOLED :不使用数据库连接池技术,每一次请求过来之后,都是创建新的Connection对象。
POOLED:使用mybatis自己实现的数据库连接池
JNDI:集成其他第三方的数据库连接池
JNDI是一套规范,大部分web容器都实现了该规范(Tomcat WebLogic WebSphere Jetty)
JNDI:java命名目录接口
连接池优点
1.每一次获取连接都从池中拿,效率高
2.因为每一次只能从池中拿,所以连接对象的创建数量是可控的(可以防止数据库宕机)
配置具体的数据库连接池参数
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>-->
<property name="url" value="jdbc:mysql://localhost:3306/powernode"/>-->
<property name="username" value="root"/>-->
<property name="password" value="123456"/>-->
<!--提醒:使用连接池时,池中很多参数需要设置以达到让连接池发挥地更好-->
<!--poolMaximumActiveConnections:连接池当中最多的正在使用的连接对象的数量上限,默认值是10-->
<property name="poolMaximumActiveConnections" value="10"/>
<!--每隔两秒打印日志,并且尝试获取连接对象-->
<property name="poolTimeToWait" value="2000"/>
<!--强行让某个连接空闲,超时时间的设置-->
<property name="poolMaximumCheckoutTime" value="10000"/>
<!--最多的空闲数量-->
<property name="poolMaximumIdleConnections" value="5"/>
</dataSource>
4.4properties
第一种
java.util.Properties类,是一个Map集合。key和value都是String类型
在该标签中可以配置多个属性
<properties>
<property name="jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="jdbc.url" value="jdbc:mysql://localhost:3306/powernode"/>
<property name="jdbc.username" value="root"/>
<property name="jdbc.password" value="123456"/>
</properties>
<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>
改进版-----最终版本
在resources下新建jdbc.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/powernode
jdbc.username= root
jdbc.password=123456
在mybatis-config.xml中
<properties resource="jdbc.properties"/>
<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>
properties和mapper标签的url属性
<!-- 方式二
从绝对路径中加载资源 file:///路径
-->
<!-- <properties url="file///"/>-->
不建议
4.5mapper
<mappers>
<!-- 执行Mapper映射文件的路径-->
<mapper resource="carMapper.xml"/>
</mappers>
完整代码
<?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>
<!-- java.util.Properties类,是一个Map集合。key和value都是String类型-->
<!-- 在该标签中可以配置多个属性-->
<!-- <properties>-->
<!-- <property name="jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>-->
<!-- <property name="jdbc.url" value="jdbc:mysql://localhost:3306/powernode"/>-->
<!-- <property name="jdbc.username" value="root"/>-->
<!-- <property name="jdbc.password" value="123456"/>-->
<!-- </properties>-->
<!-- 方式一-->
<properties resource="jdbc.properties"/>
<!-- 方式二
从绝对路径中加载资源 file:///路径
-->
<!-- <properties url="file///"/>-->
<!--开启mybatis对标准日志的实现-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!-- default表示默认使用的环境-->
<environments default="powernodeDB">
<!--其中的一个环境,连接的数据库是powernode-->
<!-- 一般一个环境environment会对应一个SqlSessionFactory对象-->
<environment id="powernodeDB">
<!--事务管理器-->
<!--
transactionManager标签:
1.作用:配置事务管理器,指定mybatis具体使用什么方式去管理事务
2.type属性有两个值:
JDBC:使用原生JDBC代码来管理事务
conn.setAutoCommit(false);
...
conn.commit();
MANAGED,mybatis不再负责事务的管理,将事务管理交给其他的JEE(JavaEE)容器来管理_spring
3.不区分大小写
4.在mybatis中提供了一个事务管理器的接口:Transaction对象
该接口下有两个实现类:
JdbcTransaction
MANAGEDTransaction
-->
<transactionManager type="JDBC"/>
<!--
dataSource配置:
1.数据源
2.作用:为程序提供Connection对象【只要是给程序提供Connection对象的都叫数据源】
3.数据源实际上是一套规范,是JDK规定的:javax.sql.DataSource
4.只要实现javax.sql.DataSource接口中所有的方法,就可以连接自己的数据源
数据库连接池是提供连接对象的,所以它就是一个数据源
连接池优点:
1.每一次获取连接都从池中拿,效率高
2.因为每一次只能从池中拿,所以连接对象的创建数量是可控的(可以防止数据库宕机)
5.常见的数据源组件:
阿里巴巴的德鲁伊连接池:druid
c3p0
dbcp
...
6.type属性指定数据源类型(即指定使用什么方式来获取Connection对象)
type属性有三个值:
UNPOOLED :不使用数据库连接池技术,每一次请求过来之后,都是创建新的Connection对象。
POOLED:使用mybatis自己实现的数据库连接池
JNDI:集成其他第三方的数据库连接池
JNDI是一套规范,大部分web容器都实现了该规范(Tomcat WebLogic WebSphere Jetty)
JNDI:java命名目录接口
-->
<dataSource type="POOLED">
<!-- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>-->
<!-- <property name="url" value="jdbc:mysql://localhost:3306/powernode"/>-->
<!-- <property name="username" value="root"/>-->
<!-- <property name="password" value="123456"/>-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- 提醒:使用连接池时,池中很多参数需要设置以达到让连接池发挥地更好-->
<!-- poolMaximumActiveConnections:连接池当中最多的正在使用的连接对象的数量上限,默认值是10-->
<property name="poolMaximumActiveConnections" value="10"/>
<!-- 每隔两秒打印日志,并且尝试获取连接对象-->
<property name="poolTimeToWait" value="2000"/>
<!-- 强行让某个连接空闲,超时时间的设置-->
<property name="poolMaximumCheckoutTime" value="10000"/>
<!-- 最多的空闲数量-->
<property name="poolMaximumIdleConnections" value="5"/>
</dataSource>
<!-- <dataSource type="JNDI">-->
<!-- <property name="initial_context" value=""/>-->
<!-- <property name="data_source" value=""/>-->
<!-- </dataSource>-->
</environment>
</environments>
<mappers>
<!-- 执行xxxMapper.xml文件的路径-->
<mapper resource="carMapper.xml"/>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>