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> T getMapper(Class<T> 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){
|
|
}
|
}
|
}
|