package cn.xdl.dao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;
public class PersonDao extends JdbcDaoSupport {
public void update() {
// 事务管理器
DataSourceTransactionManager manager = new DataSourceTransactionManager(getDataSource());
// 创建事务托管
// 参数1,事务管理器对象
TransactionTemplate template = new TransactionTemplate(manager);
template.execute(new TransactionCallback<Boolean>() {
@Override
public Boolean doInTransaction(TransactionStatus status) {
/*try {
getJdbcTemplate().update("update person_08 set id = ? where name = ?", "10008", "dawei");
if (1 == 1) {
throw new RuntimeException("停电了");
}
getJdbcTemplate().update("update person_08 set id = ? where name = ?", "10000", "jianwa");
} catch (Exception e) {
}
*/
try {
getJdbcTemplate().update("update person_08 set id = ? where name = ?", "10008", "dawei");
if (1 == 1) {
throw new RuntimeException("停电了");
}
getJdbcTemplate().update("update person_08 set id = ? where name = ?", "10000", "jianwa");
} catch (Exception e) {
status.setRollbackOnly();
}
return true;
}
});
}
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
context.getBean("personDao", PersonDao.class).update();
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;
public class PersonDao extends JdbcDaoSupport {
public void update() {
// 事务管理器
DataSourceTransactionManager manager = new DataSourceTransactionManager(getDataSource());
// 创建事务托管
// 参数1,事务管理器对象
TransactionTemplate template = new TransactionTemplate(manager);
template.execute(new TransactionCallback<Boolean>() {
@Override
public Boolean doInTransaction(TransactionStatus status) {
/*如果这里不使用TransactionTemplate的话,就不能将异常前后的两个语句视为一个整体,会产生正常的执行顺序,即执行语句一,抛出异常,程序停止,语句二不会被执行。如果使用,则认为两者是一个整体,如果抛出异常则会一起回滚。如果将其放入try块中,则又会产生执行1不执行2的结果。
*/
/*try {
getJdbcTemplate().update("update person_08 set id = ? where name = ?", "10008", "dawei");
if (1 == 1) {
throw new RuntimeException("停电了");
}
getJdbcTemplate().update("update person_08 set id = ? where name = ?", "10000", "jianwa");
} catch (Exception e) {
}
*/
try {
getJdbcTemplate().update("update person_08 set id = ? where name = ?", "10008", "dawei");
if (1 == 1) {
throw new RuntimeException("停电了");
}
getJdbcTemplate().update("update person_08 set id = ? where name = ?", "10000", "jianwa");
} catch (Exception e) {
status.setRollbackOnly();
}
return true;
}
});
}
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
context.getBean("personDao", PersonDao.class).update();
}
}
本文介绍了一个使用Spring框架进行事务管理的具体实例,通过DataSourceTransactionManager和TransactionTemplate实现对数据库操作的事务控制,确保了数据更新的一致性和完整性。
481

被折叠的 条评论
为什么被折叠?



