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()); } } }