目录
1.什么是environment标签?
environmrn标签就是环境标签,我们平时在连接数据库的时候,连接哪一个数据库就表示连接哪一个环境,比如bookStore数据库中有一个t_book数据表,而crm中也有一个t_book数据表 , 而我们在编写sql语句的时候,只会指定操作t_book表 ,但是我应该指定哪个数据库中的t_book表呢?
这就是environment标签的作用,我们先配置好环境,也即是配置好数据库,然后我们在获取SqlSessionFactory就可以指定操作哪一个数据库。
2.<environments>
<!-- environments: 环境标签 , 里面存放的都是一个个的环境,default属性是默认指向哪一个环境的id--> <environments default="development">
2.<environmrnt>标签
<!-- environment: 其中一个环境, 连接的数据库是bookstore,id属性是这个环境的标识 , 用于指定这个环境(bookStore这个数据库的id标识为:development) --> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/bookstore"/> <property name="username" value="root"/> <property name="password" value="1234"/> </dataSource> </environment>
<!-- 环境可以有多个,这个是另一个环境,也就是另一个数据库crm , 但是这个数据库里面也同样有个t_book的数据表 , 这个环境的id我们改成crm--> <environment id="crm"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/crm"/> <property name="username" value="root"/> <property name="password" value="1234"/> </dataSource> </environment>
3.实践测试
package com.feisi.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;
public class configurationTest {
// 测试environment环境标签
@Test
public void environmentTest() throws Exception{
// 我们先不指定环境,使用默认环境测试
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder() ;
// 这里创建sqlSession工厂时并没有指定那个环境 , 所以它是使用默认的
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
// 这里我们删除默认数据库(bookStore)中的数据 , 而另一个crm虽然也有t_book表,但是不会被删除
int count = sqlSession.insert("deleteBookById", 99);
System.out.println("执行语句:"+count);
sqlSession.commit();
sqlSession.close();
}
// 接下来我们再测试指定数据库的环境标签
@Test
public void environmentIsTest() throws Exception{
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder() ;
// 其实sqlSessionFactoryBuilder.build()除了指定核心配置目录外,另一个属性就是指定环境的,这里我么指定为crm数据库
SqlSessionFactory sqlSessionFactory
= sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "crm");
SqlSession sqlSession = sqlSessionFactory.openSession();
int count = sqlSession.delete("deleteBookById", 44);
// 因为我们指定了crm数据库 , 所以它就会删除crm数据库中的t_book表,而不会影响booStore中的t_book表
System.out.println("执行语句:"+count);
sqlSession.commit();
sqlSession.close();
}
}