Finder注解定义:
DbUtils解析部分:
注意:
1.当从数据库中查询某类的数据是,DbUtils会自动查询@Finder注解的关联类,
前提是,关联类的数据在这之前被存入数据库中(这点和Foreign不同).
用法:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Finder {
String valueColumn();
String targetColumn();
}
DbUtils解析部分:
else if (ColumnUtils.isFinder(field)) {
Finder column = new Finder(entityType, field);
if (!columnMap.containsKey(column.getColumnName())) {
columnMap.put(column.getColumnName(), column);
}
}
注意:
1.当从数据库中查询某类的数据是,DbUtils会自动查询@Finder注解的关联类,
前提是,关联类的数据在这之前被存入数据库中(这点和Foreign不同).
否则,关联类的值为空
2.valueColumn和targetColumn要求类型相同
用法:
@Table(name = "parent", execAfterTableCreated = "CREATE UNIQUE INDEX index_name ON parent(name,email)")
public class Parent{
private int id;
@Finder(valueColumn = "id", targetColumn = "parentId")
public FinderLazyLoader<Child> children; // 关联对象多时建议使用这种方式,延迟加载效率较高。
//@Finder(valueColumn = "id",targetColumn = "parentId")
//public Child children;
//@Finder(valueColumn = "id", targetColumn = "parentId")
//private List<Child> children;
<snip>
}
@Table(name = "child")
public class Child extends EntityBase {
private int id;
//@Foreign(column = "parentId", foreign = "id")
//public ForeignLazyLoader<Parent> parent;
@Foreign(column = "parentId", foreign = "id")
public Parent parent;
<snip>
}