-
Notifications
You must be signed in to change notification settings - Fork 60
9、Bee如何使用事务Transaction
Bee简单易用:单表操作、多表关联操作,可以不用写sql,极少语句就可以完成SQL操作;10分钟即可学会使用。
Bee功能强大:复杂查询也支持向对象方式,分页查询性能更高,一级缓存即可支持个性化优化。高级需求,还可以方便自定义SQL语句。
1. 数据库事务
1).
必须满足:原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
2).
隔离性涉及到事务的并发操作。
事务并发会引起一些问题:
脏读、不可重读、幻读 和第一类更新丢失和第二类更新丢失。
JDK 1.7 有四个级别,默认是第三级(返回值是4)。
1,2,4,8
TRANSACTION_READ_UNCOMMITTED,TRANSACTION_READ_COMMITTED,TRANSACTION_REPEATABLE_READ,TRANSACTION_SERIALIZABLE
java.sql 接口 Connection
TRANSACTION_REPEATABLE_READ 指示可以防止脏读和不可重复读的常量;幻读可以发生。
-
dirty reads and non-repeatable reads are prevented; phantom
-
reads can occur.
MYSQL 数据库中,InnoDB引擎支持事务,而 MyISAM则不支持。
2. Bee如何使用事务
Bee如何使用事务? 最多四句事务的代码,步骤如下: Transaction transaction=SessionFactory.getTransaction(); transaction.begin(); // ... 相关DB操作 transaction.commit();
//若发生异常,则回滚.
transaction.rollback();
3. 具体使用实例
Transaction transaction=SessionFactory.getTransaction();
try {
transaction.begin();
Suid suid = BeeFactory.getHoneyFactory().getSuid();
User user=new User();
user.setUsername("testuser");
user.setPassword("bee-user");
suid.insert(user);//insert 1
Orders orders = new Orders();
orders.setUserid("bee");
orders.setName("Bee(ORM Framework)");
orders.setTotal(new BigDecimal("91.99"));
orders.setRemark("test transaction");
orders.setSequence("");//empty String test
suid.insert(orders); //insert 2
transaction.commit();
List<Orders> list = suid.select(orders); //可任意组合条件查询
for (int i = 0; i < list.size(); i++) {
Logger.info(list.get(i).toString());
}
} catch (BeeException e) {
e.printStackTrace();
Logger.error(e.getMessage());
transaction.rollback();
}