数据库

io.ebean.Database 提供了大多数功能,包括查询、保存、删除和事务。

// persist ...
Customer customer  = ...
database.save(customer);


// fetch ...
List<Customer> customers =
  database.find(Customer.class)
  .findList();


// transactions ...
try (Transaction transaction = database.beginTransaction()) {

  // fetch and persist beans etc ...

  transaction.commit();
}
  
// persist ...
val customer  = ...
database.save(customer)


// fetch ...
val customers =
  database.find(Customer::class.java)
  .findList()


// transactions ...
database.beginTransaction().use { transaction ->

  // fetch and persist beans etc ...

  transaction.commit();
}
  

javax.sql.DataSource

一个 Database 实例有一个 JDBC DataSource,将其一对一地关联到一个实际数据库。

请注意,出于性能原因(用于只读查询),Database 可以有一个第二个只读 DataSource,并有可能连接到数据库读副本。

默认数据库

一个数据库可以指定为默认数据库。默认的 Database 实例已在 DB 中注册,然后可以通过 DB.getDefault() 获取。

// obtain the "default" database
Database database = DB.getDefault();
  
// obtain the "default" database
val database = DB.getDefault()
  

命名数据库

每个 Database 实例都有一个名称,并且可以注册到 DB 中,然后可以通过其名称通过 DB.byName() 获取。

// obtain a database by it's name
Database hrDatabase = DB.byName("hr");
  
// obtain a database by it's name
val hrDatabase = DB.byName("hr")
  

模型使用默认数据库

当我们的实体 Bean 扩展 Model 并且我们使用 save() 时,实际上是使用默认数据库。

Customer customer = new Customer("Roberto")

// use the default database
customer.save()
val customer = Customer("Roberto")

// use the default database
customer.save()

查询 Bean 使用默认数据库

当我们创建一个 Query Bean 并执行查询时,实际上也是使用默认数据库。

// use the default database
List<Customer> customers = new QCustomer()
    .status.equalTo(Status.NEW)
    .billingAddress.city.equalTo("Auckland")
    .findList();
// use the default database
val customers = QCustomer()
    .status.equalTo(Status.NEW)
    .billingAddress.city.equalTo("Auckland")
    .findList()

请注意,在实践中,当使用 Model 进行持久化、Query Bean 进行实体查询以及 @Transactional 进行事务处理时,我们倾向于只将数据库直接用于 DTO 查询SQL 查询SQL 更新

配置

有关通过编程方式和属性配置数据库实例的详细信息,请参见下一部分的 配置

 

DB (io.ebean.DB)

  • DB 保存一个数据库实例注册表(按名称为键)
  • DB 保存一个称为默认数据库的 Database 实例
  • DB 具有便利方法来操作默认数据库

 

获取默认或命名数据库实例

创建 Database 实例后,可以将其注册到 DB 中。然后,我们可以使用 DB 按名称获取这些 Database 实例,并且可以通过 DB.getDefault() 获取默认数据库。

// obtain the "default" database
Database server = DB.getDefault();

// obtain the HR database by name
Database hrDB = DB.byName("hr");
  

DB 便利方法

DB 具有便利方法,这些方法可以有效地代理到默认数据库。这非常有用且方便,因为许多应用程序只使用一个数据库。

Customer customer  = ...

// save using the 'default' database
DB.save(customer);

// which is the same as
Database defaultDatabase = DB.getDefault()
defaultDatabase.save(customer);
  

DB 是可选的

请注意,您根本不必在应用程序中使用 DB 单例 - 它的使用是完全可选的。相反,我们可以创建 Database 实例并根据需要对其进行注入。我们通常使用 SpringGuice 或类似的 DI 框架来执行此操作。

我们可以同时执行这两项操作,并将 Database 实例注册到 DB 和 DI 上下文中,并以这种方式访问数据库实例。

EbeanServer

Database 和 EbeanServer 是同一事物。

io.ebean.EbeanServerio.ebean.Database 的较旧的原始名称。它们可以互换使用。随着时间的推移,EbeanServer 将被弃用,并且代码应该迁移到使用 io.ebean.Database。

Ebean

DB 和 Ebean 是同一事物。

io.ebean.Ebeanio.ebean.DB 的较旧的原始名称。它们可以互换使用。随着时间的推移,Ebean 的使用将被弃用,并且代码应该迁移到使用 io.ebean.DB。