Mybatis整合其他连接池,本篇博客以整合C3P0连接池为例。
目录
MyBatis整合C3P0连接池的步骤:
(1)第一步:通过maven引入C3P0的依赖;
(2)第二步:创建C3P0和Mybatis兼容所需的数据源工厂类
(3)第三步:在mybatis-config.xml核心配置文件中设置
(4)第四步,测试
连接池
但是目前,在主流开发中,不推荐使用Mybatis自带的连接池;C3P0,Druid,DBCP等连接池都更强大;但是,Mybatis默认没有提供如C3P0直接的开发方式,我们需要对原始的Mybatis进行扩展,才能够使用C3P0这些连接池。
MyBatis整合C3P0连接池的步骤:
(关于C3P0连接池可以参考:JDBC入门十五:连接池(3):C3P0连接池入门;)
(1)第一步:通过maven引入C3P0的依赖;
(2)第二步:创建C3P0和Mybatis兼容所需的数据源工厂类
如果想让mybatis支持C3P0,需要额外扩展一个类;
package com.imooc.mybatis.datasource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;
/**
* C3P0的数据源工厂类
*/
public class C3P0DataSourceFactory extends UnpooledDataSourceFactory {
public C3P0DataSourceFactory(){
this.dataSource = new ComboPooledDataSource();
}
}
说明:
(3)第三步:在mybatis-config.xml核心配置文件中设置
和原先相比,变动如下:
主要是属性的名称都变了,因为不同的连接池对这些属性的命名要求是不同的啦,这些属性的名字不好记,需要参考相应连接池的文档(这儿是需要参考C3P0的文档)来编写。
(4)第四步,测试
随便一个测试代码:随便啦,这不是重点
package com.imooc.mybatis;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.imooc.mybatis.dto.GoodsDTO;
import com.imooc.mybatis.entity.Goods;
import com.imooc.mybatis.entity.GoodsDetail;
import com.imooc.mybatis.entity.Student;
import com.imooc.mybatis.utils.MyBatisUtils;
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;
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* JUnit单元测试类
*/
public class MyBatisTestor {
@Test
public void testSelectPage() throws Exception {
SqlSession session = null;
try {
session = MyBatisUtils.openSession();
// PageHelper.startPage()对即将到来的下一次查询进行分页处理;
// 比如下面就是第三页,每页10条数据;
PageHelper.startPage(3, 10);
Page<Goods> page = (Page)session.selectList("goods.selectPage");
System.out.println("总页数:"+page.getPages());
System.out.println("总记录数:"+page.getTotal());
System.out.println("开始行号:"+page.getStartRow());
System.out.println("结束行号:"+page.getEndRow());
System.out.println("当前页码:"+page.getPageNum());
List<Goods> data = page.getResult(); // 获取当前页数据
for (Goods goods:data){
System.out.println(goods.getTitle());
}
} catch (Exception e) {
throw e;
}finally {
MyBatisUtils.closeSession(session);
}
}
}
运行结果分析:
(1)
(2) 其中有条日志如下:其中的BasicResourcePool:
[main] 19:02:41:647 DEBUG c.m.v.resourcepool.BasicResourcePool -
com.mchange.v2.resourcepool.BasicResourcePool@14cd1699 config: [start → 5; min → 5; max → 20; inc → 3; num_acq_attempts → 30; acq_attempt_delay → 1000; check_idle_resources_delay → 0; max_resource_age → 0; max_idle_time → 0; excess_max_idle_time → 0; destroy_unreturned_resc_time → 0; expiration_enforcement_delay → 0; break_on_acquisition_failure → false; debug_store_checkout_exceptions → false; force_synchronous_checkins → false]
列出了初始化时的基本配置信息:start初始数量,min最小数量,max最大数量等;这些信息都是C3P0自动给我们输出的;
(3)