Mybatis框架(六)连接池

连接池简介

连接池里相当于一个容器,然后在里面会创建很多的连接,然后你要连接数据库,连接池就放出来一个连接,当你用完之后,就把连接池放回去,等待下一个人来使用,这样就大大节约了内存的损耗,不用老是创建和销毁连接。

连接池原理

  1. 连接池就是用于存储连接的容器
  2. 容器其实是一个集合,该集合必须是线程安全的,,不能同一个线程拿到一个连接源
  3. 先进先出
    在这里插入图片描述
  4. 取连接源过程
    在这里插入图片描述

Mybaits连接池分类

  1. UNPOOLED:采用传统的获取连接的方式,虽然也实现Javax.sql.DataSource接口,但是并没有使用池的思想。
    在这里插入图片描述
  2. POOLED:采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现
    在这里插入图片描述
  3. JNDI:采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样。 注意:如果不是web或者maven的war工程,是不能使用的。

Mybatis 中数据源的配置

我们的数据源配置就是在 SqlMapConfig.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>
MyBatis 在初始化时,根据<dataSource>的 type 属性来创建相应类型的的数据源 DataSource,即:
type=”POOLED”:MyBatis 会创建 PooledDataSource 实例
type=”UNPOOLED” : MyBatis 会创建 UnpooledDataSource 实例
type=”JNDI”:MyBatis 会从 JNDI 服务上查找 DataSource 实例,然后返回使用

Mybaits的事务控制

  1. Mybatis 中事务提交(不是自动提交)
	private InputStream in;
    private SqlSession session;
    private IUserDao dao;

    @Before//用于测试类调用之前
    public void init() throws Exception{
        // 第一步:读取配置文件
        in = Resources.getResourceAsStream("SqlMapConifg.xml");
        // 第二步:创建SqlSessionFactory工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        // 第三步:创建SqlSession
        session = sqlSessionFactory.openSession();
        // 第四步:创建Dao接口的代理对象
        dao = session.getMapper(IUserDao.class);
    }

    @After//用于测试类执行之后
    public void destory()throws Exception{
        //事务提交
        session.commit();
        // 第六步:释放资源
        session.close();
        in.close();

    }

    @Test
    public void test1()throws Exception {

       // 第五步:执行dao中的方法
        List<User> users=  session.selectList("com.lwb.dao.IUserDao.findAll");
        for(User user:users) {
            System.out.println(user);
        }

    }

在这里插入图片描述
2. Mybatis 自动提交事务的设置

  • 为什么没有自动提交事务,原因就是在连接池中取出的连接,都会将调用 connection.setAutoCommit(false)方法
  • 所以我们通过源码可以看到,通过传递一个布尔值true就可以开始自动提交事务
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41816516/article/details/106692145