1.PlatformTransactionManager
具体用法如下:(1)实例化需要数据源作参数
(2)建立事物的定义,使用DefaultTransactionDefinition类,直接New个新的就可以了
(3)调用DefaultTransactionDefinition类的setPropagationBehavior方法,参数是TransactionDefinition的常量,例如PROPAGATION_REQUIRED等。
(4)使用具体的SQL操作之前,创建一个TransactionStatus类的实例,def是DefaultTransactionDefinition的实例。
(5)正常操作的话,就使用transactionManager.commit(status)。
代码示例:
JdbcTemplate template = new JdbcTemplate(datasource);
DataSourceTransactionManager tran = new DataSourceTransactionDefinition();
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = tran.getTransaction(def);
try{
template.update("insert into userinfo(username,password) values('aaaa','bbbb')");
template.update("insert into userinfo(username,password) values('cccc','ddd')");
tran.commit(status);
}catch(Exception ex){ tran.rollback(status)};
2.TransactionTemplate
具体用法如下:(1)具体的SQL语句操作时,实例化它,TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
(2)然后具体的SQL操作,transactionTemplate.execute(new TransactionCallback(){
public Object doInTransaction(TransactionStatus status){ //这里执行SQL操作}
})
(3)如果没有返回值,可以使用TransactionCallbackWithoutResult 类。
代码示例:
final JdbcTemplate template = new JdbcTemplate(datasource);
DataSourceTransactionManager tran = new DataSourceTransactionManager(datasource);
TransactionTemplate trantemplate = new TransactionTemplate(tran);
trantemplate.execute(new TransactionCallback(){
public Object doInTransaction(TransactionStatus status){
int i = 0;
try{
template.update("insert into userinfo(username, password) values('jjj','kkk')");
template.update("insert into userinfo(username, password) values('llll','mmm')");
i = 1;
}catch(Exception ex){
ex.printStackTrace();
status.setRollbackOnly();
i=0;
}
return new Integer(i);
}
})