package com.softeem.bank.dao; import java.util.List; public interface BaseDAO<T> { public boolean insert(T t); public boolean delete(T t); public boolean update(T t); public List<T> findAll(); public T findById(T t); } package com.softeem.bank.dao; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import com.softeem.bank.dto.Account; import com.softeem.utils.DAOHelper; import com.softeem.utils.DAOHelper.CallBack; public class AccountDAO implements BaseDAO<Account>{ private Connection conn; public AccountDAO(Connection conn) { this.conn = conn; } @Override public boolean insert(Account t) { // TODO Auto-generated method stub return false; } @Override public boolean delete(Account t) { // TODO Auto-generated method stub return false; } //更新金额 @Override public boolean update(Account t) { return DAOHelper.execUpdate(conn, "update tbaccount set cash=? where account=?", t.getCash(),t.getAccount()); } @Override public Account findById(final Account t) { return DAOHelper.execQueryOne("select * from tbaccount where id=?", new CallBack<Account>() { @Override public Account getData(ResultSet rs) { try { if(rs.next()){ t.setAccount(rs.getString("account")); t.setCash(rs.getDouble("cash")); } } catch (SQLException e) { e.printStackTrace(); } return t; } }, t.getId()); } @Override public List<Account> findAll() { // TODO Auto-generated method stub return null; } } package com.softeem.bank.dto; public class Account { private int id; private String account; private double cash; public Account() { // TODO Auto-generated constructor stub } public Account(String account, double cash) { super(); this.account = account; this.cash = cash; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public double getCash() { return cash; } public void setCash(double cash) { this.cash = cash; } @Override public String toString() { return "Account [id=" + id + ", account=" + account + ", cash=" + cash + "]"; } } package com.softeem.bank.service; import java.sql.Connection; import java.sql.SQLException; import com.softeem.bank.dao.AccountDAO; import com.softeem.bank.dto.Account; import com.softeem.utils.BaseConn; /** * 业务逻辑层 * @author mrchai * */ public class AccountService extends BaseConn{ //事务 public synchronized void transfAccount(Account a,Account b,double money){ Connection conn = getConn(); //分别查询出A,B账号个各自余额 AccountDAO dao = new AccountDAO(conn); a = dao.findById(a); b = dao.findById(b); if(a.getAccount() != null && b.getAccount() != null){ //判断账号a余额是否足够 if(a.getCash() >= money){ //减少A账号的余额 a.setCash(a.getCash() - money); //增加B账号的余额 b.setCash(b.getCash() + money); try { //关闭事务自动提交 conn.setAutoCommit(false); //开始转账 boolean f1 = dao.update(a); // System.out.println(5/0); boolean f2 = dao.update(b); if(f1 && f2){ conn.commit(); System.out.println("转账成功!"); } } catch (Exception e) { try { conn.rollback();//事务回滚 System.out.println("转账失败"); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } }else{ System.out.println("余额不足!"); } }else{ System.out.println("账号A或者B不存在"); } } public static void main(String[] args) { Account a = new Account(); Account b = new Account(); a.setId(1); b.setId(3); new AccountService().transfAccount(a, b, 1000); } }
原文链接:https://blog.csdn.net/mr_tangshuai/article/details/76861720