> 文档中心 > 【MyBatis】| MyBatis核⼼配置⽂件详解

【MyBatis】| MyBatis核⼼配置⽂件详解

目录

一:MyBatis核⼼配置⽂件详解

1. Mybatis核心配置文件之多环境

2. Mybatis事务管理器

3. 对数据源的深度剖析

4. properties和mapper标签的配置和使用


一:MyBatis核⼼配置⽂件详解

(1)configuration:根标签,表示配置信息。

(2)environments:以“s”结尾表示复数,也就是说mybatis的环境可以配置多个数据源。

default属性后面跟着default属性,表示默认使⽤的是哪个环境,default后⾯填写的是environment的id,default的值只需要和environment的id值⼀致即可。

(3)environment:具体的环境配置(主要包括:事务管理器的配置 + 数据源的配置)。

id属性:给当前环境一个唯⼀标识,该标识⽤在environments的default后⾯,⽤来指定默认环境的 选择。

(4)transactionManager:配置事务管理器

type属性:指定事务管理器具体使⽤什么⽅式,可选值包括两个

(5)dataSource:指定数据源

type属性:⽤来指定具体使⽤的数据库连接池的策略,可选值包括三个 

(6)mappers:在mappers标签中可以配置多个sql映射⽂件的路径。

(7)mapper:配置某个sql映射⽂件的路径:

resource属性:使⽤相对于类路径的资源引⽤⽅式 。

url属性:使⽤完全限定资源定位符(URL)⽅式 。

                                                             

1. Mybatis核心配置文件之多环境

environments标签

(1)environments标签表示可以有多个环境,一个环境environment对应一个数据库,一个数据库就对应着一个SqlSessionFactory对象!

(2)一个环境environment对应着一个唯一标识的id,多个环境environments对应的default属性可输入environment对应的id,用来指定默认使用的数据库对象

                                                                     

(3)编写sql语句

     insert into t_car values(null,'8888','特斯拉',30.0,'2000-11-11','燃油车')    

(4)编写测试程序

package com.bjpowernode.mybatis.test;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Test;/** * @Author:朗朗乾坤 * @Package:com.bjpowernode.mybatis.test * @Project:mybatis * @name:ConfigurationTest * @Date:2022/12/30 20:15 */public class ConfigurationTest {    @Test    public void testEnvironment() throws Exception{ SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); // 使用默认的 SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml")); // 自己指定连接数据库的对象 SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "bjpowernodeDB"); SqlSession sqlSession = sqlSessionFactory.openSession(); // 执行sql int count = sqlSession.insert("car.insertCar"); System.out.println(count); sqlSession.commit(); sqlSession.close();    }}

2. Mybatis事务管理器

transactionManager标签
(1)作用:配置事务管理器。指定mybatis具体使用什么方式去管理事务。
(2)type属性有两个值:

①JDBC:使⽤JDBC原⽣的事务管理机制。

底层原理:事务开启 conn.setAutoCommit(false); ...处理业务...事务提交conn.commit();

②MANAGED:mybatis不再负责事务的管理,交给其它容器来管理事务,⽐如:Spring等。如果没有管理事务的容器,则没有事务。没有事务的含义是只要执⾏⼀条DML语句,则提交⼀次。
(3)不缺分大小写,但是不能写其他值。只能是二选一: jdbc、managed
(4)在mybatis中提供了一个事务管理器接口:Transaction该接口下有两个实现类:
①如果type="JDBC",那么底层会实例化JdbcTransaction对象。
②如果type="MANAGED",那么底层会实例化ManagedTransaction对象。        

 

3. 对数据源的深度剖析

dataSource标签

(1)dataSource被称为数据源,作用是为程序提供连接对象;凡是给程序提供Connection对象的都叫做数据源。

(2)数据源实际上是一套规范。JDK中有这套规范:javax.sql.DataSource;我们自己也可以编写数据源组件,只要实现javax.sql.DataSource接口就行了。实现接口当中所有的方法。这样就有了自己的数据源,比如:可以写一个属于自己的数据库连接池(数据库连接池是提供连接对象的,所以数据库连接池就是一个数据源)。

(3)常见的数据源组件有哪些呢【常见的数据库连接池有哪些呢】?

 阿里巴巴的德鲁伊连接池:druid、c3p0、dbcp ....

(4)type属性用来指定数据源的类型,就是指定具体使用什么方式来获取Connection对象,type属性有三个值:type="[UNPOOLED|POOLED|JNDI]"
①UNPOOLED:不使用数据库连接池,每一次请求过来后,都是创建新的Connection对象
②POOLED:使用mybatis自己实现的数据库连接池。
③JNDI:集成其它第三方的数据库连接池。

(5)JNDI是:java命名目录接口,是一套规范。大部分的web容器都实现了JNDI规范;例如:Tomcat、Jetty、WebLogic、WebSphere,这些服务器(容器)都实现了JNDI规范。
 (6)连接池的优点:每一次获取连接都是从连接池中拿,所以每次连接对象的创建数量都是可控的。

①UNPOOLED:采⽤传统的获取连接的⽅式,虽然也实现Javax.sql.DataSource接⼝,但是 并没有使⽤池的思想。 property可以是:

😊driver:JDBC 驱动的 Java 类全限定名。

😊url:数据库的 JDBC URL 地址。

😊username:登录数据库的⽤户名。

😊password:登录数据库的密码。

😊defaultTransactionIsolationLevel:默认的连接事务隔离级别。

😊defaultNetworkTimeout:等待数据库操作完成的默认⽹络超时时间(单位:毫秒)

②POOLED:采⽤传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实 现。property可以是(除了包含UNPOOLED中之外):

😊poolMaximumActiveConnections – 在任意时间可存在的活动(正在使用)连接数量,默认值:10

😊poolMaximumIdleConnections – 任意时间可能存在的空闲连接数;例如:上面配置的最多连接数量是10,这里配置最多空闲的数量是5个,如果空闲第6个了,此时连接池为了保证最多空闲的数量是5个,会真正关闭多余的空闲的连接对象。

😊poolMaximumCheckoutTime – 设置超时时间,在被强制返回之前,池中连接被检出(checked out)时间,默认值:20000 毫秒(即 20 秒)。

😊poolTimeToWait – 间隔多久打印一次日志信息,并尝试获取连接。

其它....

③JNDI:采⽤服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所拿到 DataSource不⼀样。如果不是web或者maven的war⼯程,JNDI是不能使⽤的。property可以是(最多只包含以下两个属性):

😊initial_context 这个属性⽤来在 InitialContext 中寻找上下⽂(initialContext.lookup(initial_context))这是个可选属性,如果忽略,那么将会直接从

InitialContext 中寻找 data_source 属性。

😊data_source 这是引⽤数据源实例位置的上下⽂路径。提供了 initial_context 配置时会 在其返回的上下⽂中进⾏查找,没有提供时则直接在 InitialContext 中查找。

                                                            

4. properties和mapper标签的配置和使用

(1)java.util.Properties类,实际上是一个Map集合,key和value都是String类型;语法格式:

(2)例如:我们可以把连接数据库的代码单独抽取出来配置,然后在通过变量的形式赋值过去即可

                                                                        

(3)实际上这些连接数据库中的信息,可以配置到一个文件里;在类路径下(resources),创建一个jdbc.properties文件

jdbc.properties配置文件

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatisjdbc.username=rootjdbc.password=123

使用resource引入配置文件

                                                                   

(4)也可以使用url属性,表示从绝对路径中加载资源,绝对路径的语法:file:///路径

例如:把jdbc.properties放到d盘的根目录下

(5)注意:mapper标签的使用和properties标签的使用很相似;也是resource属性:使⽤相对于类路径的资源引⽤⽅式 ;url属性:使⽤绝对路径中加载资源。

饲料网