mybatis采用的是自己的连接池技术
在SqlMapConfig.xml配置文件中,通过<dataSource type="POOLED">来实现。
连接池:
- 在实际开发中,都会使用连接池,因为它可以减少获取连接所消耗的时间;
- 连接池,就是用于存储连接的一个容器,容器就是一个集合对象。
- 该集合必须是线程安全的,不能两个线程拿到同一个连接;
- 该集合必须实现队列的特性,先进先出
举例:
1个线程池中,有8个连接,连接1,连接2被线程1,线程2拿出去使用,连接3就变成连接1;
线程2用完了,释放了连接2,连接2就回到线程池中,序号就变为连接7;
mybatis连接池分类
- 配置的位置:主配置文件SqlMapConfig.xml中的dataSource标签,type属性表示采用何种连接池方式;
- type属性的取值:
- POOLED 采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现;
- UNPOOLED 采用传统的获取连接的方式,也实现了javax.sql.DataSource接口,但是没有使用池的思想,每次都获取新的连接;
- JNDI 采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样的;
- 注意:如果不是web或maven的war工程,是不能使用JNDI的;
- 课程中使用的是tomcat服务器,采用连接池就是dbcp连接池;
<dataSource type="POOLED">执行后结果:归还连接池
- 它是从池中获取一个连接来用
source.pooled.PooledDataSource - Returned connection 712256162 to pool.
2020-03-24 09:38:13,730 324 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Opening JDBC Connection
2020-03-24 09:38:13,992 586 [ main] DEBUG source.pooled.PooledDataSource - Created connection 712256162.
2020-03-24 09:38:13,992 586 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@2a742aa2]
2020-03-24 09:38:13,997 591 [ main] DEBUG m.itheima.dao.IUserDao.findAll - ==> Preparing: select * from user
2020-03-24 09:38:14,034 628 [ main] DEBUG m.itheima.dao.IUserDao.findAll - ==> Parameters:
2020-03-24 09:38:14,079 673 [ main] DEBUG m.itheima.dao.IUserDao.findAll - <== Total: 5
User{id=41, username='大王', birthday='Sun Mar 01 19:58:51 CST 2020', sex='女', address='我家在上海市01区'}
User{id=42, username='中王', birthday='Mon Mar 02 19:58:51 CST 2020', sex='男', address='我家在上海市02区'}
User{id=43, username='小王', birthday='Mon Mar 02 19:58:51 CST 2020', sex='女', address='我家在上海市03区'}
User{id=44, username='小李', birthday='Wed Mar 11 19:58:51 CST 2020', sex='男', address='我家在上海市01区'}
User{id=65, username='小天王5', birthday='Mon Mar 23 20:15:45 CST 2020', sex='女', address='上海市静安区5'}
2020-03-24 09:38:14,085 679 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@2a742aa2]
2020-03-24 09:38:14,088 682 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@2a742aa2]
2020-03-24 09:38:14,089 683 [ main] DEBUG source.pooled.PooledDataSource - Returned connection 712256162 to pool.
<dataSource type="UNPOOLED">执行后结果:只是关闭连接
- 每次创建一个新的连接来用
Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@4b553d26
2020-03-24 09:39:42,977 302 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Opening JDBC Connection
2020-03-24 09:39:43,200 525 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@4b553d26]
2020-03-24 09:39:43,207 532 [ main] DEBUG m.itheima.dao.IUserDao.findAll - ==> Preparing: select * from user
2020-03-24 09:39:43,262 587 [ main] DEBUG m.itheima.dao.IUserDao.findAll - ==> Parameters:
2020-03-24 09:39:43,293 618 [ main] DEBUG m.itheima.dao.IUserDao.findAll - <== Total: 5
User{id=41, username='大王', birthday='Sun Mar 01 19:58:51 CST 2020', sex='女', address='我家在上海市01区'}
User{id=42, username='中王', birthday='Mon Mar 02 19:58:51 CST 2020', sex='男', address='我家在上海市02区'}
User{id=43, username='小王', birthday='Mon Mar 02 19:58:51 CST 2020', sex='女', address='我家在上海市03区'}
User{id=44, username='小李', birthday='Wed Mar 11 19:58:51 CST 2020', sex='男', address='我家在上海市01区'}
User{id=65, username='小天王5', birthday='Mon Mar 23 20:15:45 CST 2020', sex='女', address='上海市静安区5'}
2020-03-24 09:39:43,294 619 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@4b553d26]
2020-03-24 09:39:43,295 620 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@4b553d26]