本节讨论 ClusterJ API 以及用于表示应用程序处理的数据的对象模型。
应用程序编程接口。 ClusterJ API 依赖于 4 个主要接口:Session
、SessionFactory
、Transaction
和 QueryBuilder
。
Session 接口。 对 NDB Cluster 数据的所有访问都在会话的上下文中完成。Session
接口表示用户或应用程序与 NDB Cluster 的单独连接。它包含以下操作的方法:
通过主键查找持久实例
创建、更新和删除持久实例
获取查询构建器(请参阅 com.mysql.clusterj.query.QueryBuilder)
获取当前事务(请参阅 com.mysql.clusterj.Transaction)。
SessionFactory 接口。 会话是从 SessionFactory
获取的,对于要从 Java VM 访问的每个 NDB Cluster,通常只有一个实例。SessionFactory
存储有关集群的配置信息,例如 NDB Cluster 管理服务器的主机名和端口号。它还存储有关如何连接到集群的参数,包括连接延迟和超时。有关 SessionFactory 及其在 ClusterJ 应用程序中的用法的更多信息,请参阅 获取 SessionFactory 并获取 Session。
Transaction 接口。 事务不是由 Session
接口管理的;与其他现代应用程序框架一样,ClusterJ 将事务管理与其他持久性方法分离。事务划分可以由容器或 Web 服务器 servlet 过滤器自动完成。从 Session
中删除事务完成方法有助于实现这种关注点分离。
Transaction
接口支持事务数据库所需标准的开始、提交和回滚行为。此外,它还使用户能够将事务标记为仅回滚,这使得不负责完成事务的组件可以指示(由于应用程序或数据库错误)不允许事务正常完成。
QueryBuilder 接口。 QueryBuilder
接口可以使用域对象模型属性作为查询建模元素来动态构造条件查询。可以指定参数和数据库列值之间的比较,包括等于、大于和小于、介于和包含操作。可以使用对应于布尔运算符 AND、OR 和 NOT 的方法组合这些比较。还支持将值与 NULL
进行比较。
数据模型。 ClusterJ 使用域对象提供对 NDB Cluster 中数据的访问,这在许多方面类似于 JPA 对数据建模的方式。
在 ClusterJ 中,域对象映射具有以下特征:
-
所有表都映射到持久接口。对于集群中的每个
NDB
表,ClusterJ 使用一个或多个接口。在许多情况下,使用单个接口;但对于应用程序的不同部分需要不同列的情况,可以将多个接口映射到同一个表。但是,类本身不是持久的。
-
用户将列的子集映射到接口中的持久属性。因此,所有属性都映射到列;但是,并非所有列都必须映射到属性。
所有 ClusterJ 属性名称默认情况下都与列名相同。该接口为每个属性提供 getter 和 setter 方法,并具有可预测的相应方法名称。
接口上的注解定义了映射。
下图说明了应用程序环境和域对象的用戶视图,该图显示了 ClusterJ 接口建模元素之间的逻辑关系:
SessionFactory
由一个属性对象配置,该对象可能已从文件中加载或由应用程序使用其他方式动态构造(请参阅 第 4.2.2.1 节“执行 ClusterJ 应用程序和会话”)。
应用程序从 SessionFactory
获取 Session
实例,一次最多有一个线程使用一个 Session
。如果应用程序需要与数据库建立多个连接,则一个线程可以管理多个 Session
实例。
每个会话都有自己的域对象集合,每个对象表示数据库中一行的数据。域对象可以表示以下任何状态的数据:
新建;尚未存储在数据库中
从数据库中检索;可供应用程序使用
已更新;要存储回数据库
要从数据库中删除