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
.
Bootstrapping是识别 NDB Cluster 并获取 SessionFactory 以用于 cluster 的过程。每个集群每个 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);
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();