Pet*_*Mmm 4 java orm active-objects
最近我发现了ActiveObejcts,我真的很喜欢它。现在我使用的是 Atlassian 插件的最后一个版本,只有net.java.aoORM的部分。编译并运行良好。当然,如果它符合我的要求,我必须做一些性能测试。
存在@Implementation注释。那是怎么用的?javadoc 非常简短。
更新
解决方案:
public class M5 {
public static void main(String[] args) throws SQLException {
EntityManager m = EntityManagerBuilder
.url("jdbc:hsqldb:./db/db")
.username("root")
.password("")
.c3po()
.build();
m.migrate(Employee.class);
Employee p = m.create(Employee.class);
p.setFirstName("Peter");
p.setLastName("Mmm");
System.err.println(p.getLastName()); // prints "ln: Mmm"
p.save();
}
}
public class Emp {
private Employee employee;
public Emp(Employee employee) {
this.employee = employee;
}
public String getLastName() {
return "ln: " + employee.getLastName();
}
}
@Implementation(Emp.class)
interface Employee extends Entity {
String getFirstName();
void setFirstName(String name);
String getLastName();
void setLastName(String name);
}
}
Run Code Online (Sandbox Code Playgroud)
Active Objects 获取您的接口,并通过复杂代理的反射将您的 getter、setter 和关系转换为 SQL 语句。如果你想要一些你自己的代码来添加或修改你的 AO 接口的功能,你可以使用 @Implementation
例子:
AO接口:
@Implementation(PersonImpl.class)
public interface Person extends Entity {
String getLastName();
void setLastName(String name);
String getFirstName();
void setFirstName(String name);
@Ignore
String getName();
}
Run Code Online (Sandbox Code Playgroud)
执行:
public class PersonImpl {
private final Person person; // this will be the original entity proxy
public PersonImpl(Person person) {
this.person = person;
}
// "Implement" ignored functions
public String getName() {
return String.format("%s %s", this.person.getFirstName(), this.person.getLastName());
}
// "Enhance" AO getters/setters
public void setFirstName(String name) {
this.person.setFirstName("Foobar");
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,AO 通过反射访问这些实现方法。它们必须与界面中的名称相匹配。这可能会导致重构期间出现问题,因为方法名称可能会更改,并且您的编译器不会告诉您相应的 impl 方法名称尚未更改。
| 归档时间: |
|
| 查看次数: |
411 次 |
| 最近记录: |