文件首頁
MySQL NDB Cluster API 開發人員指南
相關文件 下載本手冊
PDF (US Ltr) - 3.6Mb
PDF (A4) - 3.6Mb


4.3.1.1 主要介面

ClusterJ 為應用程式提供以下主要介面: com.mysql.clusterj.SessionFactorycom.mysql.clusterj.Sessioncom.mysql.clusterj.Transactioncom.mysql.clusterj.query.QueryBuildercom.mysql.clusterj.Query啟動程序 helper 類別 com.mysql.clusterj.ClusterJHelper 包含用於建立 com.mysql.clusterj.SessionFactory 的方法。啟動程序是識別 NDB Cluster 並取得 SessionFactory 以用於叢集的程序。每個 Java VM 的每個叢集都有一個 SessionFactory。

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