4.3.1.1 主要接口

ClusterJ 提供这些主要接口供应用程序使用: com.mysql.clusterj.SessionFactorycom.mysql.clusterj.Sessioncom.mysql.clusterj.Transactioncom.mysql.clusterj.query.QueryBuildercom.mysql.clusterj.Query引导帮助程序类 com.mysql.clusterj.ClusterJHelper 包含用于创建 com.mysql.clusterj.SessionFactory. Bootstrapping是识别 NDB Cluster 并获取 SessionFactory 以用于 cluster 的过程。每个集群每个 Java VM 有一个 SessionFactory。

4.3.1.1.1 会话工厂

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

Session代表用户与集群的 com.mysql.clusterj.Session 单独连接。它包含以下方法:

  • 通过主键查找持久化实例

  • 持久实例工厂(newInstance)

  • 持久化实例生命周期管理(persist、remove)

  • 获取 QueryBuilder

  • 获取交易(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);

Transaction允许用户将 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();

QueryBuildercom.mysql.clusterj.query.QueryBuilder 允许用户构建查询。 它包含以下方法:

  • 定义要查询的域对象模型

  • 使用参数比较属性:

    • 平等的

    • 少于

    • 比...更棒

    • 少等于

    • 更大等于

    • 之间

  • 使用“和”、“或”和“非”运算符组合比较

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