• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Spring使用TransactionTemplate进行事务管理

spring 海叔叔 4年前 (2021-12-13) 66次浏览 已收录 0个评论
文章目录[隐藏]

Spring使用TransactionTemplate进行事务管理

关键词:spring,TransactionTemplate

import java.sql.ResultSet;
import java.sql.SQLException;
 
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;
 
import com.sunflower.entity.People;
public class BankDaoImp implements BankDao {
    private JdbcTemplate jdbcTemplate;
    private TransactionTemplate transactionTemplate;
 
    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }
 
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
 
    public TransactionTemplate getTransactionTemplate() {
        return transactionTemplate;
    }
 
    public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
        this.transactionTemplate = transactionTemplate;
    }
 
    @Override
    public double getMoney(final People people) {
        double money = people.getMoney();
        // 开始事务,如果出现状况则回滚
        transactionTemplate.execute(new TransactionCallback<People>() {
            @Override
            public People doInTransaction(TransactionStatus ts) {
                try {
                    final People people2 = new People();
                    // 使用JdbcTemplate进行持久化层操作
                    String sql = "select money from bank where name = ?";
                    Object[] params = new Object[] { people.getName() };
                    // 查询
                    jdbcTemplate.query(sql, params, new RowCallbackHandler() {
                        @Override
                        public void processRow(ResultSet rs)
                                throws SQLException {
                            people2.setMoney(rs.getDouble("money"));
                            System.out.println(people.getName() + "用户还有"
                                    + rs.getDouble("money") + "元余款");
                            System.out.println(people.getName() + "要从账户中取出"
                                    + people.getMoney() + "元");
                            if (people2.getMoney() < people.getMoney()) {
                                System.out.println("余额不足");
                                people.setMoney(-1);
                                return;
                            }
                        }
                    });
 
                    if (people.getMoney() < 0)
                        return null;
                    else {
                        sql = "update bank set money = ? where name = ?";
                        Object[] params2 = new Object[] {
                                people2.getMoney() - people.getMoney(),
                                people.getName() };
                        jdbcTemplate.update(sql, params2);
                        System.out.println("剩余余额:"
                                + (people2.getMoney() - people.getMoney()));
                    }
                } catch (Exception e) {
                    ts.setRollbackOnly();
                }
 
                // 如果成功,事务被提交
                return people;
            }
        });
 
        return people.getMoney();
    }
}

来源搞代码网《Spring使用TransactionTemplate进行事务管理》http://www.gaodaima.com/68564.html


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Spring使用TransactionTemplate进行事务管理
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址