JDBC--手动开启Connection事务

        三层架构中的业务逻辑层是处理业务逻辑的部分,很多时候需要调用多步Dao层的增删改操作,这就涉及到使用事务保证数据的一致性。

       Connection接口自带的事务机制需要保证多步SQL操作使用相同的连接对象,这样才能保证事务的执行环境。

       事务的边界一般是在业务逻辑层的(即事务的开启、提交、回滚都是在业务逻辑层),因为业务逻辑层会涉及多步操作,所以Connection对象要在业务逻辑层创建,然后将Connection对象传给Dao层的方法即可。

       为了确保事务的正确性,异常要统一在业务逻辑层处理


下面展示使用Connection启动事务的具体代码

	/**
	 * 开始事务
	 * @param cnn
	 */
	public static void beginTransaction(Connection cnn){
		if(cnn!=null){
			try {
				if(cnn.getAutoCommit()){
					cnn.setAutoCommit(false);
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * 提交事务
	 * @param cnn
	 */
	
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
在 Mybatis-Plus 中,我们可以通过配置 `MybatisConfiguration` 来手动释放 JDBC 连接。具体步骤如下: 1. 首先,我们需要创建一个实现了 `org.apache.ibatis.session.TransactionFactory` 接口的类,例如: ```java public class ManualTransactionFactory implements TransactionFactory { @Override public Transaction newTransaction(DataSource dataSource, TransactionIsolationLevel level, boolean autoCommit) { return new ManualTransaction(dataSource); } @Override public Transaction newTransaction(Connection connection) { return new ManualTransaction(connection); } @Override public boolean canHandleDataSource(DataSource dataSource) { return true; } } ``` 2. 接下来,我们需要创建一个实现了 `org.apache.ibatis.session.Transaction` 接口的类,例如: ```java public class ManualTransaction implements Transaction { private Connection connection; public ManualTransaction(Connection connection) { this.connection = connection; } public ManualTransaction(DataSource dataSource) { try { this.connection = dataSource.getConnection(); this.connection.setAutoCommit(false); } catch (SQLException e) { throw new MybatisPlusException(e); } } @Override public Connection getConnection() { return connection; } @Override public void commit() { try { connection.commit(); } catch (SQLException e) { throw new MybatisPlusException(e); } } @Override public void rollback() { try { connection.rollback(); } catch (SQLException e) { throw new MybatisPlusException(e); } } @Override public void close() { try { connection.close(); } catch (SQLException e) { throw new MybatisPlusException(e); } } @Override public Integer getTimeout() { return null; } } ``` 这里的 `ManualTransaction` 类中,我们实现了 `close` 方法,在执行器对象关闭时,会调用该方法释放连接。 3. 最后,在 Mybatis-Plus 的配置中,我们需要将 `MybatisConfiguration` 中的 `transactionFactory` 属性设置为我们自己创建的 `ManualTransactionFactory`,例如: ```java @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // ... return interceptor; } @Bean public MybatisConfiguration mybatisConfiguration() { MybatisConfiguration configuration = new MybatisConfiguration(); configuration.setMapUnderscoreToCamelCase(true); configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class); configuration.setTransactionFactory(new ManualTransactionFactory()); // 设置事务工厂 return configuration; } } ``` 这样,当执行器对象关闭时,就会自动调用 `ManualTransaction` 中的 `close` 方法释放连接了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值