MyBatis核心配置文件--<environment>

文章介绍了MyBatis中的environment标签在数据库连接中的应用,如何通过配置不同的环境来指定操作特定数据库。实践部分展示了如何在测试中使用默认环境和指定特定环境进行SQL操作。

目录

 

1.什么是environment标签?

2.标签

3.实践测试


 

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();
    }
}

 

 

<?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"> <!--6.编写核心配置文件--> <!--configuration 配置--> <configuration> <!--引入配置文件--> <properties resource="jdbc.properties"></properties> <properties resource=".properties"></properties> <!-- 2. 全局设置:开启驼峰命名自动转换(brand_name → brandName) --> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <typeAliases> <!-- 起别名 --> <!--name属性的值是实体类所在包 映射文件中的resultType 可以不用包名 不区分大小写 实体类名的小写--> <package name="com.itgaohe.pojo"/> <!-- 扫的的是实体类的包 对包下的所有实体类起别名--> </typeAliases> <!--environments 操作环境--> <environments default="development"> <!--environment 单个操作环境--> <environment id="development"> <!--transactionManager 事务管理类型 JDBC--> <transactionManager type="JDBC"></transactionManager> <!--dataSource 数据库连接池--> <dataSource type="POOLED"> <!--property 配置信息--> <!-- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>--> <!-- <property name="url" value="jdbc:mysql:///mybatis?characterEncoding=utf-8&serverTimezone=UTC"/>--> <!-- <property name="username" value="root"/>--> <!-- <property name="password" value="123456"/>--> <!--识别配置文件中的内容--> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!--mappers 将映射文件加载到配置文件--> <mappers> <!-- <mapper resource="com/itgaohe/mapper/UserMapper.xml"></mapper>--> <!-- 代理开发: 包扫描 自动加载 指定包下的所有Mapper 接口和对应的映射文件--> <package name="com.itgaohe.mapper"/> </mappers> </configuration>
最新发布
11-29
### 理解 MyBatis 核心配置文件 MyBatis 核心配置文件MyBatis 框架的重要组成部分,它包含了数据库连接、映射文件、全局设置等关键信息。一个完整的核心配置文件包含如下标签: ```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/> <!-- 设置 --> <settings /> <!-- 类型命名 --> <typeAliases /> <!-- 类型处理器 --> <typeHandlers /> <!-- 对象工厂 --> <objectFactory /> <!-- 插件 --> <plugins /> <!-- 配置环境 --> <environments> <environment> <!-- 事务管理器 --> <transactionManager /> <!-- 数据源 --> <dataSource /> </environment> </environments> <!-- 数据厂商标识 --> <databaseIdProvider /> <!-- 映射器 --> <mappers /> </configuration> ``` 各标签作用如下: - `<properties>`:用于引入外部属性文件,可配置数据库连接信息等。 - `<settings>`:全局设置,可调整 MyBatis 的行为,如开启驼峰命名映射等。 - `<typeAliases>`:类型别名,为 Java 类型定义简短别名,简化配置。 - `<typeHandlers>`:类型处理器,用于 Java 类型和 JDBC 类型之间的转换。 - `<objectFactory>`:对象工厂,负责创建结果对象。 - `<plugins>`:插件,可对 MyBatis核心流程进行拦截和增强。 - `<environments>`:配置数据库环境,可包含多个 `<environment>` 标签,每个代表一个数据库环境。 - `<databaseIdProvider>`:数据厂商标识,可根据不同数据库厂商执行不同 SQL。 - `<mappers>`:引入映射文件,包含了 SQL 语句和 Java 方法的映射关系[^2]。 ### 优化建议 #### 1. 使用 `<properties>` 引入外部配置文件 将数据库连接信息等配置到外部属性文件中,便于维护和修改。 ```xml <properties resource="db.properties"/> ``` `db.properties` 文件内容示例: ```properties jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test jdbc.username=root jdbc.password=123456 ``` 在 `<dataSource>` 中使用这些属性: ```xml <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> ``` #### 2. 开启驼峰命名映射 在 `<settings>` 中开启驼峰命名映射,方便处理数据库字段和 Java 属性的映射。 ```xml <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> ``` #### 3. 使用 `<typeAliases>` 简化类型引用 为常用的 Java 类型定义别名,减少配置文件中的全类名引用。 ```xml <typeAliases> <typeAlias type="com.example.User" alias="User"/> </typeAliases> ``` 在映射文件中可直接使用别名: ```xml <select id="getUser" resultType="User"> SELECT * FROM users WHERE id = #{id} </select> ``` #### 4. 选择合适的映射文件引入方式 `<mappers>` 元素引入映射文件有 4 种方法,可根据项目情况选择合适的方式,如使用类路径引入: ```xml <mappers> <mapper resource="com/example/mapper/UserMapper.xml"/> </mappers> ``` ### 可能存在的问题及解决方法 #### 1. 映射文件未找到 确保映射文件的路径和文件名正确,检查 `<mappers>` 元素的配置。 #### 2. 类型别名冲突 避免定义重复的别名,确保每个别名唯一。 #### 3. 数据库连接失败 检查数据库连接信息,确保数据库服务正常运行,用户名和密码正确。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值