zoukankan      html  css  js  c++  java
  • Mybatis学习(五)-数据库连接池与事务控制

    一、数据库连接池

    Mybatis有自己的连接池技术。在 Mybatis 的主配置文件中,通过<dataSource type=”pooled”>来实现 Mybatis 中连接池的配置

    1.1、连接池分类

    image

    0700e11809bef4d78c17383abf86b894fbc.jpg

    mybatis支持三种内置的数据源类型:

    • Pooled:实现dataSource接口,并且使用了池的思想。
    • UNPooled:同样也是实现了dataSource接口,但是该类型并没有使用池的思想。
    • JDNI:采用服务器提供的JDNI技术实现的,并且在不同服务器之间获取的连接池是不一样的。

    注意:如果项目不是web或者maven的war工程,则是无法使用的。比如Tomcat服务器采用的就是DBCP连接池

    1.2、连接池数据源配置

    <!-- 配置 mybatis 的环境 -->
    <environments default="development">
        <!-- 配置 mysql 的环境 -->
        <environment id="development">
            <!-- 配置事务的类型 -->
            <transactionManager type="JDBC"/>
            <!-- 配置连接数据库的信息:用的是数据源(连接池) -->
            <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>
        </environment>
    </environments>
    

    1.3、PooledDataSource源码分析流程图

    参考文章:https://my.oschina.net/mengyuankan/blog/2664784

    二、Mybatis事务管理

    Mybatis 中事务的提交方式,本质上就是调用 JDBC 的 setAutoCommit()来实现事务控制

    运行之前的代码:


    package com.dianchou.test;
    
    import com.dianchou.dao.UserMapper;
    import com.dianchou.domain.QueryVo;
    import com.dianchou.domain.User;
    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.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Date;
    import java.util.List;
    
    
    public class MybatisTest {
        private InputStream in = null;
        private SqlSessionFactoryBuilder builder =null;
        private SqlSessionFactory factory = null;
        private SqlSession sqlSession = null;
        private UserMapper mapper = null;
    
        @Before
        public void init() throws IOException {
            //1.读取配置文件
            in = Resources.getResourceAsStream("mybatis-config.xml");
            //2.创建SqlSessionFactory构建者对象
            builder= new SqlSessionFactoryBuilder();
            //3.创建SqlSessionFactory
            factory = builder.build(in);
            //4.使用 SqlSessionFactory 生产 SqlSession 对象
            sqlSession = factory.openSession();
            //5.使用 SqlSession 创建 dao 接口的代理对象
            mapper = sqlSession.getMapper(UserMapper.class);
        }
    
        @Test
        public void testSaveUser2(){
            User user = new User();
            user.setUsername("AA");
            user.setAddress("shenzhen");
            user.setSex("");
            user.setBirthday(new Date());
            System.out.println("保存之前: " + user );
            mapper.saveUser(user);
            System.out.println("保存之后: " + user );
    
        }
        @After
        public void destroy() throws IOException {
            //事务提交
            sqlSession.commit();
    
            //7.释放资源
            sqlSession.close();
            in.close();
        }
    }
    

    image

    设置自动提交事务(不常用):

    image

    image

  • 相关阅读:
    面向对象
    面向对象
    面向对象
    面向对象
    面向对象
    面向对象
    面向对象
    面向对象
    3.1
    面向对象
  • 原文地址:https://www.cnblogs.com/hujinzhong/p/13293339.html
Copyright © 2011-2022 走看看