Android Ormlite 学习笔记2 -- 主外键关系

时间:2023-03-08 19:08:02
Android Ormlite 学习笔记2 -- 主外键关系

以上一篇为例子,进行主外键的查询

定义Users.java 和 Role.java

Users -- Role 关系为:1对1 即父表关系

Role -- Users 关系为:1对多 即子表关系

下面看2个实体类,贴主要代码

-- Role.java

    public ForeignCollection<Users> getUsers() {
return users;
} public void setUsers(ForeignCollection<Users> users) {
this.users = users;
} @ForeignCollectionField(eager = true) // 必须
private ForeignCollection<Users> users;

-- Users.java

    @DatabaseField(foreign = true, foreignColumnName = "rid")
private Role role; public Role getRole() {
return role;
} public void setRole(Role role) {
this.role = role;
}

1对1关系很简单,也很神奇的地方是直接调用就可以了。

    /**
* 一对一
*
* @throws SQLException
*/
public void testSelect() throws SQLException {
List<Users> datas = userDao.queryForAll();
for (Users user : datas) {
Log.i("chenrui", "[name]" + user.getName());
Log.i("chenrui", "[Role]:" + user.getRole().getName());
}
}

1对多关系,因为ForeignCollection<T> 继承了 这几个 CloseableIterable<T>, Collection<T>, Iterable<T> 接口,所以ForeignCollection<T>是可以使用foreach遍历。

    /**
* 一对多
*
* @throws SQLException
*/
public void testSelctMore() throws SQLException {
ForeignCollection<Users> datas = roleDao.queryForId("1").getUsers();
if (!datas.isEmpty()) {
for (Users user : datas) {
Log.i("chenrui", "User:" + user.getName());
}
}
}