ClusterJ 为应用程序提供以下主要接口:com.mysql.clusterj.SessionFactory
,com.mysql.clusterj.Session
,com.mysql.clusterj.Transaction
,com.mysql.clusterj.query.QueryBuilder
和 com.mysql.clusterj.Query
。 引导 帮助类 com.mysql.clusterj.ClusterJHelper
包含用于创建 com.mysql.clusterj.SessionFactory
的方法。 引导 是识别 NDB Cluster 并获取用于与集群交互的 SessionFactory 的过程。每个集群每个 Java VM 只有一个 SessionFactory。
The 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 The 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);
Transaction The 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 The com.mysql.clusterj.query.QueryBuilder
允许用户构建查询。它包含用于
定义要查询的域对象模型
-
使用参数比较属性
等于
小于
大于
小于等于
大于等于
介于
包含在
使用 "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();