实体类中如何进行数据库表中的关联。GreenDao实现的很简单。
一对一,使用注解@ToOne(),括号中参数为对应表对应的外键
public class Son {
@Id(autoincrement = true)
private Long id;
private String name;
private int age;
private Long fatherId;
@ToOne(joinProperty = "fatherId")//一对一关系,fatherId为Father的外键
private Father father;
}
public class Son {
@Id(autoincrement = true)
private Long id;
private String name;
private int age;
}
一对多,使用注解@ToMany(),参数为对应表的外键
@Entity
public class Son {
@Id(autoincrement = true)
private Long id;
private String name;
private int age;
@ToMany(referencedJoinProperty = "fatherId")
@OrderBy("age ASC")//按照年龄升序
private List<Father> fathers;
}
接下来查询。
一对一
private void queryOneToOne() {
List<Son> sons = sonDao.queryBuilder().list();
for (Son son:sons) {
Log.d("son","father call "+ son.getFather().getName());
}
}
一对多
private void queryOneToMany() {
List<Son> sons = sonDao.queryBuilder().list();
for (Son son:sons) {
List<Father> fathers = son.getFathers();
for (Father father:fathers)
Log.d("son","我是"+son.getName()+"我爸爸是"+father.getName());
}
}
一对一,一对多查询时,其实是等你用到对应的属性才去查询,这里的是直接查询加载了所有的son进缓存中。不妨想想,如果在UI界面中,有一个listview,用户频繁操作,按一次你再去查询一次,这样会造成UI线程阻塞。
所以有时候一次性加载数据进内存也是有好处的。