liuxiaolong
2019-05-09 0d1d88cdb668e75ea8609417ac18ae19947e9525
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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){
            
        }
    }
}