连接池简单介绍
1. 为什么要使用连接池
最主要还是提高数据库查询效率
2. 连接池思想(原理)
Java 程序不再直接建立数据库连接,而是从连接池获取数据库连接,用完“放”回连接池,给其他程序使用,这样就不用反复创建、销毁连接,从而提高效率
3. 连接池的概述
在 Java 中, 连接池使用 javax.sql.DataSource 接口来表示连接池。
注意:DataSource 仅仅只是一个接口, 由各大服务器厂商来实现 (Tomcat.JBoss)。
常用的 DataSource 的实现:
DBCP: Spring 推荐的
C3P0: Hibernate 推荐的
Druid : (德鲁伊)阿里巴巴开源的, 性能最好,速度最快
DataSource(数据源)和连接池 (Connection Pool) 是同一个
4.Druid 连接池的使用
@Test public void testName() throws Exception { //1. 创建 Druid 连接池对象 DruidDataSource ds = new com.alibaba.druid.pool.DruidDataSource(); //1.1 设置驱动 ds.setDriverClassName("com.mysql.jdbc.Driver"); //1.2 设置 url ds.setUrl("jdbc:mysql://localhost:3306/mybatis"); //1.3 设置账号 ds.setUsername("root"); //1.4 设置密码 ds.setPassword("1234"); //1.5 设置最大连接数 ds.setMaxActive(10);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">2.通过连接池对象获取数据库连接对象</span> Connection conn =<span style="color: rgba(0, 0, 0, 1)"> ds.getConnection(); System.</span><span style="color: rgba(0, 0, 255, 1)">out</span><span style="color: rgba(0, 0, 0, 1)">.println(conn); }</span></pre>
通过读取 properties 文件
@Test public void test2() throws Exception {</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">1.类加载器,主要从当前项目的classpath(类路径相对路径)下面读取资源形成输入流</span> ClassLoader classLoader =<span style="color: rgba(0, 0, 0, 1)"> Thread.currentThread().getContextClassLoader(); InputStream inputStream </span>= classLoader.getResourceAsStream("db.properties"<span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">2.创建Properties 配置对象</span> Properties p = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Properties(); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">2.1读取输入流</span>
p.load(inputStream);
//3. 使用工厂类创建 Druid 连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(p);
//4. 获取连接对象
Connection conn = dataSource.getConnection();
System.out.println(conn);
}}