package framework.util; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.defaults.DefaultSqlSessionFactory; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.DefaultTransactionDefinition; import framework.startup.FrameUtil; /** * 封装mybatis的手动操作 * * @author andy, andycode@qq.com * @date 2016年2月13日 * @time 上午11:09:47 */ public class DbUtil { // DataSourceTransactionManager txManager = (DataSourceTransactionManager)wac.getBean("txManager"); // // DefaultTransactionDefinition def = new DefaultTransactionDefinition(); // def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); // TransactionStatus status = txManager.getTransaction(def); // DefaultSqlSessionFactory sf = (DefaultSqlSessionFactory)wac.getBean("sqlSessionFactory"); // SqlSession sess = sf.openSession(false); // // UserMapper mapper = sess.getMapper(UserMapper.class); // // TSysUser user = new TSysUser(); // user.setUserId("40733b24-c5c2-11e5-b84d-6a9eda6d908a"); // user.setRealName("aaaaaaa"); // // mapper.updateUser(user); // // //txManager.rollback(status); // txManager.commit(status); // sess.close(); private DataSourceTransactionManager txManager; private DefaultTransactionDefinition def; private TransactionStatus status; private DefaultSqlSessionFactory sf; private SqlSession sess; public DbUtil(){ } /** * 开启事务 */ public void open(){ this.txManager = (DataSourceTransactionManager)FrameUtil.getBean("txManager"); def = new DefaultTransactionDefinition(); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); status = txManager.getTransaction(def); sf = (DefaultSqlSessionFactory)FrameUtil.getBean("sqlSessionFactory"); sess = sf.openSession(false); } /** * 获取 mapper 操作接口,在 open, rollback, commit 之后调用 * @param cls * @return */ public T getMapper(Class cls){ return sess.getMapper(cls); } /** * 回滚,回滚后如果再次操作,需重新调用 getMapper 获取接口 */ public void rollback(){ try{ this.txManager.rollback(status); }catch(Throwable t){ } close(); } /** * 提交,提交后如果再次操作,需重新调用 getMapper 获取接口 */ public void commit(){ try{ this.txManager.commit(status); }catch(Throwable t){ throw new RuntimeException(t); }finally{ close(); } } /** * 关闭,成功调用 rollback 或 commit 后,可不需调用 */ public void close(){ try{ this.sess.close(); }catch(Throwable t){ } } }