MyBatis与Spring整合前后事务管理有所区别
整合前:通过
session = sessionFactory.openSession(true); //或者是false
设置事务是否自动提交;
整合后,在这样写就不起作用了,无论设置为true还是false 都会自动提交事务;
如果想设置事务非自动提交有以下几种方案:
① 创建session之后,手动拿到connection,设置事务非自动提交
session.getConnection().setAutoCommit(false);
② 通过spring管理事务
@Test /** * 测试插入数据,同时测试手动提交事务 */ public void test_insert() { System.out.println("==============插入数据=================="); //开启事务 DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) DaoApplicationContext .getInstance().getBean("txManager"); TransactionStatus transactionStatus = (TransactionStatus) transactionManager .getTransaction(definition); Fh_fullnote order = new Fh_fullnote(); order.setHf_serialid("HF100120160829155555012507"); order.setHf_orderid("OD100120160829155555012507"); order.setCharge_phone("18201304217"); order.setCharge_money(50D); int insertRet = fh_fullnoteDao.insert(order); //提交事务 transactionManager.commit(transactionStatus); System.out.println("插入数据返回值:" + insertRet); }
③ 注解式事务
首先对Dao层做一个详细的解析
Dao层应用上下文
package ctp.demo.dao.fh.dao; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class DaoApplicationContext { private static ApplicationContext ctx=null; public static ApplicationContext getCtx() { return ctx; } public static void setCtx(ApplicationContext ctx) { DaoApplicationContext.ctx = ctx; } public static ApplicationContext getInstance(){ if(ctx == null){ ctx=new ClassPathXmlApplicationContext("applicationContext-Dao.xml"); } return ctx; } }