Mybatis 的连接池及事务
(了解, 会用)
Mybatis 连接池
配置的位置
主配置文件 SQLMapConfig.xml 中的 dataSource 标签, type 属性就是表示采用何种连接池方式.
type 的取值
POOLED: 采用传统的 javax.sql.DataSource 规范中的连接池, mybatis 中有针对规范的实现
UNPOOLED: 采用传统的获取连接的方式, 虽然也实现 javax.sql.DataSource 接口, 但是并没有采用池的思想
JNDI: 采用服务器提供的 JNDI 技术实现, 来获取 DataSource 对象, 不同的服务器所能拿到的 DataSource 是不一样的. 如果不是 web 或 maven 的 war 工程, 是不能使用的. 我们使用的是 tomcat 服务器, 采用连接池就是 dbcp 连接池.
举例:
使用 POOLED
- <dataSource type="POOLED">
- <!-- 配置连接数据库的 4 个基本信息 -->
- <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>
使用 UNPOOLED
- <dataSource type="UNPOOLED">
- <!-- 配置连接数据库的 4 个基本信息 -->
- <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>
事务控制的分析
Mybatis 中事务的提交方式, 本质上就是调用 JDBC 的 setAutoCommit() 来实现事务控制.
这是我们的 Connection 的整个变化过程, 通过分析我们能够发现之前的 CUD 操作过程中, 我们都要手动进行事务的提交, 原因是 setAutoCommit() 方法, 在执行时它的值被设置为 false 了, 所以我们在 CUD 操作中, 必须通过 sqlSession.commit() 方法来执行提交操作.
那么如何设置成自动提交呢?
如图所示
- //4. 使用工厂生产 SqlSession 对象
- session = factory.openSession(true);
此时事务就设置为自动提交了
来源: http://www.bubuko.com/infodetail-3126607.html