Skip to content

9、Bee如何使用事务Transaction

Bee edited this page Jun 30, 2020 · 1 revision

Bee简单易用:单表操作、多表关联操作,可以不用写sql,极少语句就可以完成SQL操作;10分钟即可学会使用。

Bee功能强大:复杂查询也支持向对象方式,分页查询性能更高,一级缓存即可支持个性化优化。高级需求,还可以方便自定义SQL语句。

Bee如何使用事务Transaction

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();
    }