db4o的SODA查询方式

一、SODA查询方式的优势

1、底层——db4o查询对象数据查询时使用的查询方式。

2、最终——QBE、NQ查询最终都要转化为SODA查询执行。

3、代码优美,让人感觉思路比较清晰、易读。 我不知道

4、动态查询,其他查询方式不能完成的任务。

5、在java和.net中书写方式相同。

二、SODA查询方式的劣势

1、既非类型安全也不是运行时检错。

2、较其他查询方式代码量稍多。我不知道

三、体验一下SODA(苏打)的魅力红唇 

1、代码优美、容易读懂

// *将Pilot类在数据库中的实例全部查询出来
// 定义一个查询器,通过数据库执行query()方法得到,container是数据库连接
final Query query = container.query();
// 给查询器定义一个查询范围,类的名称
query.constrain(Pilot.class);

// ………这里还有故事………

// 查询器执行查询操作,返回一个ObjectSet实例
ObjectSet result = query.execute();

2、查询条件扩展简单

//在上一个查询方法中添加查询条件,就可以完成扩展
//定义查询“字段”和查询“条件”
query.descend("name").constrain("John");

3、查询逻辑扩展简单,只需要认识几个单词就行

*估计这些限制查询条件和逻辑的方法都采用了“装饰器模式”编写(同类型引用,同类型继承)

//查询条件涉及的方法equals(),contains(),like(),or(),and(),not()
query.descend("name").constrain("oh").contains()
// Or like, which is like .contains(), but case insensitive
		.or(query.descend("name").constrain("AnN").like())
		// The .endsWith and .startWith constrains are also there,
		// the true for case-sensitive, false for case-insensitive
		.or(query.descend("name").constrain("NY").endsWith(false));

4、级联(嵌套)查询,关系数据库查询的常见操作

//*在类设计的时候存在一对多、多对多等关系因而存在级联查询
Query query = container.query();
//对Car类进行查询
query.constrain(Car.class);
//对Car类中的pilot字段查询
//pilot字段属于Pilot类
//对Pilot类的name字段查询
query.descend("pilot").descend("name").constrain("John");

ObjectSet<Object> result = query.execute();

 

四、小品SODA(苏打)

    SODA查询方式底层特性在上面的代码例子中已经完全表现了出来。在面向对象数据库中一个类是通过“字段”来存储的,而SODA通过“字段”来查询数据,因而不是类型安全的。这种查询方式有点像关系数据库通过字段来查询数据。NQ查询是通过类的方法来实现的。

    对象数据库存储的是“类的实例”,类字段类型可能是

1、基本数据类型(数字、字符)
2、引用类型(类、集合)

针对类型丰富的字段SODA基本以不变应万变的方式来工作。对于引用类型

//对字段查询,字段本身是一个类的实例FieldClass
//对这个类的字段,目标搜索结束
//设置查询条件
query.descend("fieldClass").descend("field").constrain("queryString");

 

    SODA的高级查询方式叫做SODA Evaluations ,作用:db4o的关键字constrain与SQL语言中的关键字IN相似可以接受一个“条件集合”。与IN不同的是constrain方法内部必须是个类的实例。而这个类必须实现Evaluation接口,重写evaluate(Candidate candidate) 方法。
db4o SODA Evaluations Reference (java) 帮助的参考

 

    SODA的排序有升序(orderAscending())、降序(orderDescending())放在descend()之后就可以了。自定义排序方法异常复杂,先不学了。

转载于:https://www.cnblogs.com/ponyblog/archive/2012/01/17/2324247.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值