事务¶
我们以一个交易的事例来说明如何在mango框架中使用事务。
首先我们需要一张账户表来存储用户的账户数据,其中:uid是表账户标识,money则是账户余额:
CREATE TABLE `accounts` (
`uid` int(11) NOT NULL,
`money` int(11) NOT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
接着书写AccountsDao:
@DB
public interface AccountsDao {
@SQL("update accounts set money = money + :2 where uid = :1")
boolean addMoney(int uid, int inc);
}
最后是使用事务的代码:
public class AccountsDaoRunner {
public static void main(String[] args) {
String driverClassName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/mango_example";
String username = "root"; // 这里请使用您自己的用户名
String password = "root"; // 这里请使用您自己的密码
DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
Mango mango = Mango.newInstance(ds);
AccountsDao dao = mango.create(AccountsDao.class);
int zhangsan = 1;
int lisi = 2;
int money = 100;
Transaction tx = TransactionFactory.newTransaction();
try {
dao.addMoney(zhangsan, -money);
dao.addMoney(lisi, money);
tx.commit();
} catch (Throwable e) {
tx.rollback();
}
}
}
上面的代码中zhangsan(张三)转给lisi(李四)100块。如果没有异常则事务提交,有异常则事务回滚。