GreenDao一对一,一对多查询

实体类中如何进行数据库表中的关联。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线程阻塞。

所以有时候一次性加载数据进内存也是有好处的。

猜你喜欢

转载自blog.csdn.net/callmeMrLu/article/details/81159927