在 MyBatis 中,處理事務可以通過編程式事務管理或者聲明式事務管理來實現。這里我們將分別介紹這兩種方法。
編程式事務管理是通過編寫代碼來管理事務的開始、提交和回滾。在 MyBatis 中,你可以使用 SqlSession
對象來實現編程式事務管理。以下是一個簡單的示例:
public class BaseDao {
private SqlSessionFactory sqlSessionFactory;
public BaseDao(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
public void saveData(Object data) {
SqlSession sqlSession = null;
try {
// 開啟事務
sqlSession = sqlSessionFactory.openSession();
sqlSession.insert("YourMapperNamespace.saveData", data);
// 提交事務
sqlSession.commit();
} catch (Exception e) {
// 回滾事務
if (sqlSession != null) {
sqlSession.rollback();
}
throw new RuntimeException("Error saving data", e);
} finally {
// 關閉 SqlSession
if (sqlSession != null) {
sqlSession.close();
}
}
}
}
聲明式事務管理是通過配置文件或注解來管理事務的開始、提交和回滾。在 Spring 框架中,你可以使用 @Transactional
注解來實現聲明式事務管理。首先,需要在 Spring 配置文件中配置事務管理器:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
然后,在你的 BaseDao 層的方法上添加 @Transactional
注解:
import org.springframework.transaction.annotation.Transactional;
public class BaseDao {
@Autowired
private YourMapper yourMapper;
@Transactional
public void saveData(Object data) {
yourMapper.saveData(data);
}
}
這樣,當 saveData
方法執行時,Spring 會自動為你管理事務的開始、提交和回滾。如果方法執行過程中發生異常,事務將回滾;否則,事務將提交。