06-1、mybatis连接池和事务控制

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]

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值