(转)Spring的编程式事务例子

本文详细介绍了如何使用Spring框架进行事务管理,并通过JDBC实现数据库操作,确保了业务逻辑的原子性和一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



纯JDBC操作, 对某些项目来说, 也许更好, Spring JDBC Framework让你不用关心Connection, Statement, ResultSet.

定义数据源
spring事务编程的例子<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
spring事务编程的例子    <property name="jndiName">
spring事务编程的例子        <value>java:/comp/env/jdbc/oracle</value>
spring事务编程的例子    </property>
spring事务编程的例子</bean>

定义事务管理器
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>

定义dao
spring事务编程的例子<bean id="customerDAO" class="com.waterye.dao.impl.CustomerDAOImpl">
spring事务编程的例子    <property name="dataSource" ref="dataSource" />
spring事务编程的例子    <property name="transactionManager" ref="transactionManager" />
spring事务编程的例子</bean>


public class CustomerDaoImpl extends JdbcDaoSupport implements CustomerDAO {
    private DataSource dataSource; 
    pirvate TransactionManager transactionManager;

    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    public void setTransactionManager(DataSourceTransactionManager transactionManager) {
        this.transactionManager = transactionManager;
    } 

    public Map get(Integer id) throws Exception {
        String querySql = "select * from customer where id = ?";

        return getJdbcTemplate().queryForMap(querySql, new Object[] { id }); 
    }

    public void insert(final Map customer) throws Exception {
        String seqSql = "select customer_seql.nextval from dual"; 
        String insertSql = "insert into customer (id, code, name, status) values (?, ?, ?, ?)";
        
        TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
        transactionTemplate.execute(new TransactionCallbackWithoutResult() { 
            protected void doInTransactionWithoutResult(TransactionStatus status) { 
                JdbcTemplate jdbcTemplate = getJdbcTemplate();
                int id = jdbcTemplate.queryForInt(seqSql);
                Object[] params = new Object[] { new Integer(id), customer.get("code"), customer.get("name"), map.get("status") };
                jdbcTemplate.update(insertSql, params);
            }
        }
    }

    public void update(final Map customer) throws Exception {
        //  
    }

    public void delete(Integer id) throws Exception {
        String deleteSql = "delete from customer where id = ?";

        TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
        transactionTemplate.execute(new TransactionCallbackWithoutResult() { 
            protected void doInTransactionWithoutResult(TransactionStatus status) { 
                getJdbcTemplate().update(deleteSql, new Object[] { id });
            }
        }
    }

    public List findValidCustomers() throws Exception {
        String querySql = "select * from customer where status = 'valid' order by code";

        return getJdbcTemplate().query(querySql, new OracleColumnMapRowMapper()); 
    }
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值