一文彻底搞懂Mybatis系列(四)之mybatis核心配置文件详解

简介: 一文彻底搞懂Mybatis系列(四)之mybatis核心配置文件详解

一、核心配置文件之多环境配置

使用environment 标签,进行多环境的配置 ,具体配置如下:
<?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.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/powernode?useUnicode=true&amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
        <environment id="mybatisDB">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatisDB?useUnicode=true&amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/CarMapper.xml"/>
        <mapper resource="com/UserMapper.xml"/>
    </mappers>
</configuration>
配置说明:
1、<environments default="development"> 表示默认的环境配置,通过id来指定
2、一个环境下对应一个SqlSessionFactory 对象

核心测试代码演示

1、使用默认的环境
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
 SqlSessionFactory factory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
指定mybatis的环境
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"),"development");

二、核心配置文件之事务管理器

transactionManager标签:

作用:配置事务管理器。指定mybatis具体使用什么方式去管理事务。

type属性有两个值:

第一个:JDBC:使用原生的JDBC代码来管理事务。
conn.setAutoCommit(false);
·...
conn.commit();
第二个:MANAGED:mybatis不再负责事务的管理,将事务管理交给其它的JEE(JavaEE)容器来管理。例如:spring了.大小写无所谓。不缺分大小写。但是不能写其他值。只能是二选一:

jdbc、managed

在mybatis中提供了一个事务管理器接口:Transaction

该接口下有两个实现类:
JdbcTransdction ManagedTransaction
如果type="JDBC",那么底层会实例化JdbcTransaction对象。
如果type="MANAGED",那么底层会实例化ManagedTransaction

三、核心配置文件之数据源配置

dataSource配置:

1.dataSource被称为数据源。

2.dataSource作用是什么?

为程序提供Connection对象。(但凡是给程序提供Connection对象的,都叫做数据源。)

**3.数据源实际上是一套规范。**JDK中有这套规范:javax.sql.DataSource(这个数据源的规范,这套接口实际上是JDK规定的。)

4.我们自己也可以编写数据源组件,只要实现javax.sql.DataSource接口就行了

实现接口当中所有的方法。

这样就有了自己的数据源比如你可以写一个属于自己的数据库连接池(数据库连接池是提供连接对象的,所以数据库连接池就是一个数据源)。

5.常见的数据源组件有哪些呢【常见的数据库连接池有哪些呢】?

阿里巴巴的德鲁伊连接池:druid、с3pθ 、dbcp

6.type属性用来指定数据源的类型

就是指定具体使用什么方式来获取Connection对象:

type属性有三个值:必须是三选一。

type=“[UNPOOLED|POOLED|JNDI]”

UNPOOLED:不使用数据库连接池技术。每一次请求过来之后,都是创建新的Connection对象。

POOLED:使用mybatis自己实现的数据库连接池。

JNDI:集成其它第三方的数据库连接池。

测试UNPOOLED和POOLED的区别
1、如果配置了UNPOOLED,表示不使用连接池
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="UNPOOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                ......
</configuration>
@Test
    public void testMybatis1() throws IOException {
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //使用默认的环境
        SqlSessionFactory factory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
        //指定mybatis的环境
        SqlSession sqlSession = factory.openSession();
        Car car = sqlSession.selectOne("jskdlf.selectById",12);
        System.out.println(car.toString());
        sqlSession.commit();
        sqlSession.close();
        SqlSession sqlSession2 = factory.openSession();
        Car car1 = sqlSession2.selectOne("aaaaaddd.selectById",12);
        System.out.println(car1.toString());
        sqlSession2.commit();
        sqlSession2.close();
    }
获得的连接对象,是不一样的,每次都获取到一个新创建的连接对象,
这样会很消耗资源

2、如果配置了POOLED,表示使用mybatis默认的连接池
• 1
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                ......
</configuration>
运行结果如下,我们发现都是同一个连接对象

总结连接池优点:

1.每一次获取连接都从池中拿,效率高。
2.因为每一次只能从池中拿,所以连接对象的创建数量是可控的。
假设最多的连接数量是:10个最多空闲的数量是:5个。
假设目前已经空闲5个了。马上第6个要空闲了。
假设第6个空闲下来了。此时连接池为了保证最多空闲的数量5个,
会真正关闭多余的空闲的连接对象。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
11月前
|
SQL Java 数据库连接
MyBatis的配置文件中定义类型别名(type aliases)的技巧。
类型别名提供了一种便捷的方式来引用复杂的全限定类名。通过使用 `<package>`标签进行自动扫描或使用 `<typeAlias>`标签手动指定,可以在整个MyBatis配置中提高清晰度和维护性。无论是简化mapper文件中的配置,还是提高整体的配置可读性,类型别名都是一个非常有用的配置工具。
435 0
|
XML Java 数据库连接
三、MyBatis核心配置文件详解
三、MyBatis核心配置文件详解
442 15
|
XML Java 数据库连接
MyBatis入门——MyBatis XML配置文件(3)
MyBatis入门——MyBatis XML配置文件(3)
884 6
|
SQL Java 数据库连接
Mybatis快速入门,Mybatis的核心配置文件
Mybatis快速入门,Mybatis的核心配置文件
221 1
|
XML Java 数据库连接
Javaweb之Mybatis的XML配置文件的详细解析
Javaweb之Mybatis的XML配置文件的详细解析
514 1
|
Java 数据库连接 mybatis
Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
|
XML Java 数据库连接
mybatis环境搭建步骤(含配置文件代码)
mybatis环境搭建步骤(含配置文件代码)
|
Java Spring
ssm(Spring+Spring mvc+mybatis)Spring配置文件——applicationContext.xml
ssm(Spring+Spring mvc+mybatis)Spring配置文件——applicationContext.xml
|
缓存 Java 数据库连接
【MyBatis】主配置文件
【MyBatis】主配置文件
293 0
|
XML Java 数据库连接
【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......
【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......
386 0