Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2011-09-13) Siena

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

http://www.sienaproject.com/index.html

这个需要翻墙才能看到,一个技术网站也被我们伟大的长城防火墙给和谐了,真让人郁闷。

Siena也是一个设计非常简单的ORM,而且很有自己的特色。可以说,它是目前我看到的里面最好的那个(如果ActiveObjects不用接口和getter/setter的话,两个就并列第一了)。

它的灵感来源于Google App Engine Python Datastore API,看一个查询的例子:

List someEmployees = Employee.all()

.filter(“firstName”, “Mark”)

.order(“-lastName”)

.fetch(10);

相当的简洁明快。再和它的实体类的定义:

@Table(“employees”)

public class Employee extends Model {

@Id(Generator.AUTO_INCREMENT)

public Long id;

@Column(“first_name”)

@Max(200) @NotNull

public String firstName;

@Column(“last_name”)

@Max(200) @NotNull

public String lastName;

@Column(“contact_info”)

public Json contactInfo;

@Column(“boss”) @Index(“boss_index”)

public Employee boss;

@Filter(“boss”)

public Query employees;

public static void main(String[] args) {

Employee e = new Employee();

e.firstName = “John”;

e.lastName = “Smith”;

e.contactInfo = map()

.put(“email”, “john.smith@example.com“)

.put(“telephone”, list(“xxx”, “yyy”));

e.insert();

System.out.println(e.contactInfo);

}

public static Query all() {

return Model.all(Employee.class);

}

}

类似于play中的JPA,也是很好理解和接受的。

它有这么几个优点:

  1. 设计简单,好学好用

  2. 不光支持常见的数据库,还支持Google App Engine datastore和Amazon's SimpleDB

  3. 如果你某些字段的结构比较复杂,可以把它变成json保存在一个字段里,非常方便

准备好好研究一下这个项目。它当前的版本才0.7.x,看起来还不太成熟

comments powered by Disqus