ClusterJ 為應用程式提供以下主要介面: com.mysql.clusterj.SessionFactory
、com.mysql.clusterj.Session
、com.mysql.clusterj.Transaction
、com.mysql.clusterj.query.QueryBuilder
和 com.mysql.clusterj.Query
。 啟動程序 helper 類別 com.mysql.clusterj.ClusterJHelper
包含用於建立 com.mysql.clusterj.SessionFactory
的方法。啟動程序是識別 NDB Cluster 並取得 SessionFactory 以用於叢集的程序。每個 Java VM 的每個叢集都有一個 SessionFactory。
com.mysql.clusterj.SessionFactory
是透過屬性設定的,這些屬性會識別應用程式連接的 NDB Cluster
com.mysql.clusterj.connectstring 會識別 ndb_mgmd 主機名稱和連接埠
com.mysql.clusterj.connect.retries 是連接時的重試次數
com.mysql.clusterj.connect.delay 是連接重試之間的延遲時間 (以秒為單位)
com.mysql.clusterj.connect.verbose 會告知是否在連線時向 System.out 顯示訊息
com.mysql.clusterj.connect.timeout.before 是等待第一個節點回應連線要求的秒數
com.mysql.clusterj.connect.timeout.after 是等待最後一個節點回應連線要求的秒數
com.mysql.clusterj.connect.database 是要使用的資料庫名稱
File propsFile = new File("clusterj.properties");
InputStream inStream = new FileInputStream(propsFile);
Properties props = new Properties();
props.load(inStream);
SessionFactory sessionFactory = ClusterJHelper.getSessionFactory(props);
工作階段 com.mysql.clusterj.Session
代表使用者與叢集的個別連線。它包含以下方法
依主索引鍵尋找持續性執行個體
持續性執行個體工廠 (newInstance)
持續性執行個體生命週期管理 (persist、remove)
取得 QueryBuilder
取得 Transaction (currentTransaction)
Session session = sessionFactory.getSession();
Employee existing = session.find(Employee.class, 1);
if (existing != null) {
session.remove(existing);
}
Employee newemp = session.newInstance(Employee.class);
newemp.initialize(2, "Craig", 15, 146000.00);
session.persist(newemp);
交易 com.mysql.clusterj.Transaction
允許使用者將多個作業組合到單一資料庫交易中。它包含以下方法
開始一個工作單元
從工作單元認可變更
復原自工作單元開始以來所做的所有變更
將工作單元標記為僅復原
取得目前工作單元的復原狀態
Transaction tx = session.currentTransaction();
tx.begin();
Employee existing = session.find(Employee.class, 1);
Employee newemp = session.newInstance(Employee.class);
newemp.initialize(2, "Craig", 146000.00);
session.persist(newemp);
tx.commit();
QueryBuilder com.mysql.clusterj.query.QueryBuilder
允許使用者建立查詢。它包含以下方法
定義要查詢的網域物件模型
-
使用以下項目比較屬性與參數
equal
lessThan
greaterThan
lessEqual
greaterEqual
between
in
使用 "and"、"or" 和 "not" 運算子組合比較
QueryBuilder builder = session.getQueryBuilder();
QueryDomainType<Employee> qemp = builder.createQueryDefinition(Employee.class);
Predicate service = qemp.get("yearsOfService").greaterThan(qemp.param("service"));
Predicate salary = qemp.get("salary").lessEqual(qemp.param("salaryCap"));
qemp.where(service.and(salary));
Query<Employee> query = session.createQuery(qemp);
query.setParameter("service", 10);
query.setParameter("salaryCap", 180000.00);
List<Employee> results = query.getResultList();