GreenDao教程(3):一對一,一對多,多對多
阿新 • • 發佈:2019-01-26
1. 前言
- 主要介紹GreenDao 一對一,一對多,多對多應用
- 這部分還是有些坑的,注意看示例程式碼中註釋即可避開
- 本文資料來源網路公開資源,並根據個人實踐見解純手打整理,如有錯誤請隨時指出。
- 本文主要用於個人積累及分享,文中可能引用其他技術大牛文章(僅引用連結不轉載),如有侵權請告知必妥善處理。
2. 一對一
2.1. 註解
@ToOne(joinProperty = "childId")
2.2. 示例
- 這裡舉一個簡單的例子,使用者物件UserBean和使用者其他資訊物件OtherUserInfoBean,每個使用者都對應一個使用者其他資訊
- 檢視以下程式碼和註釋,可以清楚的瞭解一對一如何使用(自動注入程式碼可以適當忽略)
- 以下程式碼主要包括實體類定義(UserBean.java、OtherUserInfoBean.java),insert一組資料,delete一組資料3個部分
2.2.1. 實體類定義
以下示例為rebuild之後的程式碼
- UserBean.java
@Entity
public class UserBean {
@Id
//必須使用包裝類物件型別Long,而非基本型別long
private Long id;
@NotNull
private String name;
private int age;
private String province;
private boolean isMale;
private String idCard;
//ToOne註解使用的joinProperty = "otherUserInfoId"指的是UserBean中自定義的這個otherUserInfoId
private Long otherUserInfoId;
//在insert時,將otherUserInfoId同一對一關聯的OtherUserInfoBean的主鍵id繫結
@ToOne(joinProperty = "otherUserInfoId")
private OtherUserInfoBean otherUserInfoBean;
//-------------------------------自動注入程式碼部分---開始
@Generated(hash = 4979683)
private transient Long otherUserInfoBean__resolvedKey;
/**
* Used for active entity operations.
*/
@Generated(hash = 83707551)
private transient UserBeanDao myDao;
/**
* Used to resolve relations
*/
@Generated(hash = 2040040024)
private transient DaoSession daoSession;
@Generated(hash = 359442482)
public UserBean(Long id, @NotNull String name, int age, String province,
boolean isMale, String idCard, Long otherUserInfoId) {
this.id = id;
this.name = name;
this.age = age;
this.province = province;
this.isMale = isMale;
this.idCard = idCard;
this.otherUserInfoId = otherUserInfoId;
}
@Generated(hash = 1203313951)
public UserBean() {
}
/**
* Convenient call for {@link org.greenrobot.greendao.AbstractDao#refresh(Object)}.
* Entity must attached to an entity context.
*/
@Generated(hash = 1942392019)
public void refresh() {
if (myDao == null) {
throw new DaoException("Entity is detached from DAO context");
}
myDao.refresh(this);
}
/**
* Convenient call for {@link org.greenrobot.greendao.AbstractDao#update(Object)}.
* Entity must attached to an entity context.
*/
@Generated(hash = 713229351)
public void update() {
if (myDao == null) {
throw new DaoException("Entity is detached from DAO context");
}
myDao.update(this);
}
/**
* Convenient call for {@link org.greenrobot.greendao.AbstractDao#delete(Object)}.
* Entity must attached to an entity context.
*/
@Generated(hash = 128553479)
public void delete() {
if (myDao == null) {
throw new DaoException("Entity is detached from DAO context");
}
myDao.delete(this);
}
/**
* called by internal mechanisms, do not call yourself.
*/
@Generated(hash = 1952804343)
public void setOtherUserInfoBean(OtherUserInfoBean otherUserInfoBean) {
synchronized (this) {
this.otherUserInfoBean = otherUserInfoBean;
otherUserInfoId = otherUserInfoBean == null ? null : otherUserInfoBean.getId();
otherUserInfoBean__resolvedKey = otherUserInfoId;
}
}
/**
* To-one relationship, resolved on first access.
*/
@Generated(hash = 1275005484)
public OtherUserInfoBean getOtherUserInfoBean() {
Long __key = this.otherUserInfoId;
if (otherUserInfoBean__resolvedKey == null || !otherUserInfoBean__resolvedKey.equals(__key)) {
final DaoSession daoSession = this.daoSession;
if (daoSession == null) {
throw new DaoException("Entity is detached from DAO context");
}
OtherUserInfoBeanDao targetDao = daoSession.getOtherUserInfoBeanDao();
OtherUserInfoBean otherUserInfoBeanNew = targetDao.load(__key);
synchronized (this) {
otherUserInfoBean = otherUserInfoBeanNew;
otherUserInfoBean__resolvedKey = __key;
}
}
return otherUserInfoBean;
}
public Long getOtherUserInfoId() {
return this.otherUserInfoId;
}
public void setOtherUserInfoId(Long otherUserInfoId) {
this.otherUserInfoId = otherUserInfoId;
}
public String getIdCard() {
return this.idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
public boolean getIsMale() {
return this.isMale;
}
public void setIsMale(boolean isMale) {
this.isMale = isMale;
}
public String getProvince() {
return this.province;
}
public void setProvince(String province) {
this.province = province;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
/** called by internal mechanisms, do not call yourself. */
@Generated(hash = 1491512534)
public void __setDaoSession(DaoSession daoSession) {
this.daoSession = daoSession;
myDao = daoSession != null ? daoSession.getUserBeanDao() : null;
}
//-------------------------------自動注入程式碼部分---結束
@Override
public String toString() {
//toString UserBean一對一關聯的otherUserInfoBean時,
//不能直接使用變數otherUserInfoBean,需要呼叫自動注入生成的getOtherUserInfoBean()獲取關聯物件
return "UserBean{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", province='" + province + '\'' +
", isMale=" + isMale +
", idCard='" + idCard + '\'' +
", otherUserInfoId=" + otherUserInfoId +
", otherUserInfoBean=" + (getOtherUserInfoBean() == null ? "null" : getOtherUserInfoBean().toString()) +
'}';
}
- OtherUserInfoBean.java
@Entity
public class OtherUserInfoBean {
@Id
//必須使用包裝類物件型別Long,而非基本型別long
private Long id;
private String address;
private String tel;
private Date birthday;
//-------------------------------自動注入程式碼部分---開始
public Date getBirthday() {
return this.birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getTel() {
return this.tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getAddress() {
return this.address;
}
public void setAddress(String address) {
this.address = address;
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
@Generated(hash = 647485055)
public OtherUserInfoBean(Long id, String address, String tel, Date birthday) {
this.id = id;
this.address = address;
this.tel = tel;
this.birthday = birthday;
}
@Generated(hash = 59605238)
public OtherUserInfoBean() {
}
//-------------------------------自動注入程式碼部分---結束
@Override
public String toString() {
return "OtherUserInfoBean{" +
"id=" + id +
", address='" + address + '\'' +
", tel='" + tel + '\'' +
", birthday=" + birthday +
'}';
}
2.2.2. insert一組資料
以下程式碼,其中GreenDaoUtil是獲取DaoSession的一個單例工具工具類。獲取DaoSession可以通過自己的方式獲取,但請保持單例。
UserBean user = new UserBean();
user.setAge((int) (Math.random() * 100 + 10));
user.setIdCard((int) (Math.random() * 10000) + "123456789");
if (Math.random() * 100 > 50) {
user.setIsMale(true);
} else {
user.setIsMale(false);
}
user.setName("李看啥" + (int) (Math.random() * 1000));
user.setProvince("shanhaijing");
Long otherUserInfoId = (long) (Math.random() * 1000);
//只setOtherUserInfoId,不setOtherUserInfoBean
user.setOtherUserInfoId(otherUserInfoId);
//insert user
GreenDaoUtil.getDaoSession(activity).getUserBeanDao().insert(user);
OtherUserInfoBean otherUserInfoBean = new OtherUserInfoBean();
//主鍵id使用user的otherUserInfoId
otherUserInfoBean.setId(otherUserInfoId);
otherUserInfoBean.setTel(String.valueOf((i + 100) * 19 + Math.random() * 100));
otherUserInfoBean.setAddress("dongshanjing");
Date date = new Date();
date.setTime((long) (System.currentTimeMillis() - Math.random() * 2000000000));
otherUserInfoBean.setBirthday(date);
//insert otherUserInfoBean
GreenDaoUtil.getDaoSession(activity).getOtherUserInfoBeanDao().insert(otherUserInfoBean);
2.2.3. delete一組資料
- 以下程式碼,其中GreenDaoUtil是獲取DaoSession的一個單例工具類。DaoSession可以通過自己的方式獲取,但請保持單例。
- 之所以把簡單的delete拿出來說,是因為,delete任意一組一對一關聯資料其中一個一部分(比如只delete userBean,不delete otherUserInfoBean),另一部分不受影響
GreenDaoUtil.getDaoSession(activity).getUserBeanDao().deleteByKey(user.getId());
2.3. 結語(一對一)
- 關於id的繫結,注意以上示例程式碼註釋
- 關於刪除資料,並沒有關聯刪除
3. 一對多
3.1. 註解
@ToMany(referencedJoinProperty = "parentId")
3.2. 示例
- 舉例,LeaderBean和MemberBean,每個leader可能對應多個member
- 檢視以下程式碼和註釋,可以清楚的瞭解一對多如何使用(自動注入程式碼可以適當忽略)
- 以下程式碼主要包括實體類定義(LeaderBean.java、MemberBean.java),insert一組資料2個部分
3.2.1. 實體類定義
以下示例為rebuild之後的程式碼
- LeaderBean.java
/**
* 一對多
* Created by songyuan on 2017/3/31.
*/
@Entity
public class LeaderBean {
@Id
private Long id;
private String name;
//此處的leaderId是在MemberBean中定義的一個變數(請看下面的MemberBean.java)
@ToMany(referencedJoinProperty = "leaderId")
private List<MemberBean> memberBeanList;
//-------------------------------自動注入程式碼部分---開始
/**
* Convenient call for {@link org.greenrobot.greendao.AbstractDao#refresh(Object)}.
* Entity must attached to an entity context.
*/
@Generated(hash = 1942392019)
public void refresh() {
if (myDao == null) {
throw new DaoException("Entity is detached from DAO context");
}
myDao.refresh(this);
}
/**
* Convenient call for {@link org.greenrobot.greendao.AbstractDao#update(Object)}.
* Entity must attached to an entity context.
*/
@Generated(hash = 713229351)
public void update() {
if (myDao == null) {
throw new DaoException("Entity is detached from DAO context");
}
myDao.update(this);
}
/**
* Convenient call for {@link org.greenrobot.greendao.AbstractDao#delete(Object)}.
* Entity must attached to an entity context.
*/
@Generated(hash = 128553479)
public void delete() {
if (myDao == null) {
throw new DaoException("Entity is detached from DAO context");
}
myDao.delete(this);
}
/**
* Resets a to-many relationship, making the next get call to query for a fresh result.
*/
@Generated(hash = 73665005)
public synchronized void resetMemberBeanList() {
memberBeanList = null;
}
/**
* To-many relationship, resolved on first access (and after reset).
* Changes to to-many relations are not persisted, make changes to the target entity.
*/
@Generated(hash = 1515955432)
public List<MemberBean> getMemberBeanList() {
if (memberBeanList == null) {
final DaoSession daoSession = this.daoSession;
if (daoSession == null) {
throw new DaoException("Entity is detached from DAO context");
}
MemberBeanDao targetDao = daoSession.getMemberBeanDao();
List<MemberBean> memberBeanListNew = targetDao._queryLeaderBean_MemberBeanList(id);
synchronized (this) {
if (memberBeanList == null) {
memberBeanList = memberBeanListNew;
}
}
}
return memberBeanList;
}
/**
* Used for active entity operations.
*/
@Generated(hash = 703242250)
private transient LeaderBeanDao myDao;
/**
* Used to resolve relations
*/
@Generated(hash = 2040040024)
private transient DaoSession daoSession;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
@Generated(hash = 590590377)
public LeaderBean(Long id, String name) {
this.id = id;
this.name = name;
}
@Generated(hash = 1761610276)
public LeaderBean() {
}
/** called by internal mechanisms, do not call yourself. */
@Generated(hash = 1648395956)
public void __setDaoSession(DaoSession daoSession) {
this.daoSession = daoSession;
myDao = daoSession != null ? daoSession.getLeaderBeanDao() : null;
}
//-------------------------------自動注入程式碼部分---結束
@Override
public String toString() {
String memberBeanListStr = "";
if (getMemberBeanList().size() > 0) {
for (MemberBean memberBean : getMemberBeanList()) {
memberBeanListStr = memberBeanListStr + memberBean.toString() + ";";
}
}else{
memberBeanListStr = "null";
}
return "LeaderBean{" +
"id=" + id +
", name='" + name + '\'' +
", memberBeanList=" + memberBeanListStr +
'}';
}
}
- MemberBean.java
/**
* Created by songyuan on 2017/3/31.
*/
@Entity
public class MemberBean {
@Id
private Long id;
//此處自定義leaderId,用於和LeaderBean對應
private Long leaderId;
private String name;
//-------------------------------自動注入程式碼部分---開始
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Long getLeaderId() {
return this.leaderId;
}
public void setLeaderId(Long leaderId) {
this.leaderId = leaderId;
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
@Generated(hash = 1935793106)
public MemberBean(Long id, Long leaderId, String name) {
this.id = id;
this.leaderId = leaderId;
this.name = name;
}
@Generated(hash = 1592035565)
public MemberBean() {
}
//-------------------------------自動注入程式碼部分---結束
@Override
public String toString() {
return "MemberBean{" +
"id=" + id +
", leaderId=" + leaderId +
", name='" + name + '\'' +
'}';
}
}
3.2.2. insert一組資料
for (int i = 0; i < 2; i++) {
LeaderBean leader = new LeaderBean();
leader.setName("張吃啥" + (int) (Math.random() * 1000));
GreenDaoUtil.getDaoSession(activity).getLeaderBeanDao().insert(leader);
for (int j = 0; j < 3; j++) {
MemberBean memberBean = new MemberBean();
//setLeaderId,值為其所屬的leader的id(leaderBean儲存完成後,快取即可獲取到資料庫中生成的主鍵id)
memberBean.setLeaderId(leader.getId());
memberBean.setName("趙小" + (int) (Math.random() * 1000));
GreenDaoUtil.getDaoSession(activity).getMemberBeanDao().insert(memberBean);
}
}
3.3. 結語(一對多)
- 關於id的繫結,注意以上示例程式碼註釋
- delete一個LeaderBean資料,對應的MemberBean資料不會被刪除(同一對一的效果)
4. 多對多
4.1. 註解
@JoinEntity(entity = TeacherJoinStudentBean.class,
sourceProperty = "tId",
targetProperty = "sId")
4.2. 示例
- 舉例,TeacherBean和StudentBean,每個teacher可能對應多個student,每個student也可能對應多個teacher,就如同大學的選修課
- 多對多的實現關鍵是一個關係繫結類(TeacherJoinStudentBean.java),這個類中只有變數teacherId和studentId,用來記錄繫結的關係
- 檢視以下程式碼和註釋,可以清楚的瞭解多對多如何使用(自動注入程式碼可以適當忽略)
- 以下程式碼主要包括實體類定義(TeacherBean.java、StudentBean.java),繫結類定義(TeacherJoinStudentBean.java),insert一組資料3個部分
4.2.1. 實體類定義
以下示例為rebuild之後的程式碼
- TeacherBean.java
@Entity
public class TeacherBean {
@Id
private Long id;
//entity指的是繫結類
//sourceProperty填寫繫結類中標示自身的id,此處為tId,指TeacherBean的id
//targetProperty填寫繫結類中標示關聯類的id,此處為sId,指StudentBean的id
@ToMany
@JoinEntity(entity = TeacherJoinStudentBean.class,
sourceProperty = "tId",
targetProperty = "sId")
private List<StudentBean> studentBeanList;
//-------------------------------自動注入程式碼部分---開始
/**
* Convenient call for {@link org.greenrobot.greendao.AbstractDao#refresh(Object)}.
* Entity must attached to an entity context.
*/
@Generated(hash = 1942392019)
public void refresh() {
if (myDao == null) {
throw new DaoException("Entity is detached from DAO context");
}
myDao.refresh(this);
}
/**
* Convenient call for {@link org.greenrobot.greendao.AbstractDao#update(Object)}.
* Entity must attached to an entity context.
*/
@Generated(hash = 713229351)
public void update() {
if (myDao == null) {
throw new DaoException("Entity is detached from DAO context");
}
myDao.update(this);
}
/**
* Convenient call for {@link org.greenrobot.greendao.AbstractDao#delete(Object)}.
* Entity must attached to an entity context.
*/
@Generated(hash = 128553479)
public void delete() {
if (myDao == null) {
throw new DaoException("Entity is detached from DAO context");
}
myDao.delete(this);
}
/**
* Resets a to-many relationship, making the next get call to query for a fresh result.
*/
@Generated(hash = 747728825)
public synchronized void resetStudentBeanList() {
studentBeanList = null;
}
/**
* To-many relationship, resolved on first access (and after reset).
* Changes to to-many relations are not persisted, make changes to the target entity.
*/
@Generated(hash = 767851859)
public List<StudentBean> getStudentBeanList() {
if (studentBeanList == null) {
final DaoSession daoSession = this.daoSession;
if (daoSession == null) {
throw new DaoException("Entity is detached from DAO context");
}
StudentBeanDao targetDao = daoSession.getStudentBeanDao();
List<StudentBean> studentBeanListNew = targetDao._queryTeacherBean_StudentBeanList(id);
synchronized (this) {
if (studentBeanList == null) {
studentBeanList = studentBeanListNew;
}
}
}
return studentBeanList;
}
/**
* Used for active entity operations.
*/
@Generated(hash = 121856788)
private transient TeacherBeanDao myDao;
/**
* Used to resolve relations
*/
@Generated(hash = 2040040024)
private transient DaoSession daoSession;
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
@Generated(hash = 121852154)
public TeacherBean(Long id) {
this.id = id;
}
@Generated(hash = 1376380279)
public TeacherBean() {
}
/** called by internal mechanisms, do not call yourself. */
@Generated(hash = 1588249045)
public void __setDaoSession(DaoSession daoSession) {
this.daoSession = daoSession;
myDao = daoSession != null ? daoSession.getTeacherBeanDao() : null;
}
//-------------------------------自動注入程式碼部分---結束
@Override
public String toString() {
return "TeacherBean{" +
"id=" + id +
", studentBeanList=" + (getStudentBeanList().size() == 0 ? "null" : getStudentBeanListStr()) +
'}';
}
private String getStudentBeanListStr() {
String studentBeanListStr = "";
for (StudentBean studentBean : getStudentBeanList()) {
studentBeanListStr = studentBeanListStr + studentBean.toStringStudentBeanOnly() + ";";
}
return studentBeanListStr;
}
/**
* 用於student列印時呼叫
* 僅列印TeacherBean的屬性,不列印關聯的student,否則死迴圈StackOverflowError
*
* @return
*/
public String toStringTeacherBeanOnly() {
return "TeacherBean{" +
"id=" + id +
'}';
}
}
- StudentBean.java
@Entity
public class StudentBean {
@Id
private Long id;
//entity指的是繫結類
//sourceProperty填寫繫結類中標示自身的id,此處為sId,指StudentBean的id
//targetProperty填寫繫結類中標示關聯類的id,此處為tId,指TeacherBean的id
@ToMany
@JoinEntity(entity = TeacherJoinStudentBean.class,
sourceProperty = "sId",
targetProperty = "tId")
private List<TeacherBean> teacherBeanList;
//-------------------------------自動注入程式碼部分---開始
/**
* Convenient call for {@link org.greenrobot.greendao.AbstractDao#refresh(Object)}.
* Entity must attached to an entity context.
*/
@Generated(hash = 1942392019)
public void refresh() {
if (myDao == null) {
throw new DaoException("Entity is detached from DAO context");
}
myDao.refresh(this);
}
/**
* Convenient call for {@link org.greenrobot.greendao.AbstractDao#update(Object)}.
* Entity must attached to an entity context.
*/
@Generated(hash = 713229351)
public void update() {
if (myDao == null) {
throw new DaoException("Entity is detached from DAO context");
}
myDao.update(this);
}
/**
* Convenient call for {@link org.greenrobot.greendao.AbstractDao#delete(Object)}.
* Entity must attached to an entity context.
*/
@Generated(hash = 128553479)
public void delete() {
if (myDao == null) {
throw new DaoException("Entity is detached from DAO context");
}
myDao.delete(this);
}
/**
* Resets a to-many relationship, making the next get call to query for a fresh result.
*/
@Generated(hash = 832141143)
public synchronized void resetTeacherBeanList() {
teacherBeanList = null;
}
/**
* To-many relationship, resolved on first access (and after reset).
* Changes to to-many relations are not persisted, make changes to the target entity.
*/
@Generated(hash = 299074847)
public List<TeacherBean> getTeacherBeanList() {
if (teacherBeanList == null) {
final DaoSession daoSession = this.daoSession;
if (daoSession == null) {
throw new DaoException("Entity is detached from DAO context");
}
TeacherBeanDao targetDao = daoSession.getTeacherBeanDao();
List<TeacherBean> teacherBeanListNew = targetDao._queryStudentBean_TeacherBeanList(id);
synchronized (this) {
if (teacherBeanList == null) {
teacherBeanList = teacherBeanListNew;
}
}
}
return teacherBeanList;
}
/**
* Used for active entity operations.
*/
@Generated(hash = 1251043925)
private transient StudentBeanDao myDao;
/**
* Used to resolve relations
*/
@Generated(hash = 2040040024)
private transient DaoSession daoSession;
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
@Generated(hash = 881285408)
public StudentBean(Long id) {
this.id = id;
}
@Generated(hash = 2097171990)
public StudentBean() {
}
/** called by internal mechanisms, do not call yourself. */
@Generated(hash = 2072577263)
public void __setDaoSession(DaoSession daoSession) {
this.daoSession = daoSession;
myDao = daoSession != null ? daoSession.getStudentBeanDao() : null;
}
//-------------------------------自動注入程式碼部分---結束
@Override
public String toString() {
String teacherBeanListStr = "";
if (getTeacherBeanList().size() > 0) {
for (TeacherBean teacherBean : getTeacherBeanList()) {
teacherBeanListStr = teacherBeanListStr + teacherBean.toStringTeacherBeanOnly() + ";";
}
} else {
teacherBeanListStr = "null";
}
return "StudentBean{" +
"id=" + id +
", teacherBeanList=" + (getTeacherBeanList().size() == 0 ? "null" : getTeacherBeanListStr()) +
'}';
}
private String getTeacherBeanListStr() {
String teacherBeanListStr = "";
for (TeacherBean teacherBean : getTeacherBeanList()) {
teacherBeanListStr = teacherBeanListStr + teacherBean.toStringTeacherBeanOnly() + ";";
}
return teacherBeanListStr;
}
/**
* 用於teacher列印時呼叫
* 僅列印StudentBean的屬性,不列印關聯的teacher,否則死迴圈StackOverflowError
*
* @return
*/
public String toStringStudentBeanOnly() {
return "StudentBean{" +
"id=" + id +
'}';
}
}
4.2.2. 繫結類定義
- TeacherJoinStudentBean.java
繫結類,包含teacher的id和student的id
@Entity
public class TeacherJoinStudentBean {
@Id
private Long id;
private Long tId;
private Long sId;
//-------------------------------自動注入程式碼部分---開始
public Long getSId() {
return this.sId;
}
public void setSId(Long sId) {
this.sId = sId;
}
public Long getTId() {
return this.tId;
}
public void setTId(Long tId) {
this.tId = tId;
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
@Generated(hash = 998000662)
public TeacherJoinStudentBean(Long id, Long tId, Long sId) {
this.id = id;
this.tId = tId;
this.sId = sId;
}
@Generated(hash = 1542025906)
public TeacherJoinStudentBean() {
}
//-------------------------------自動注入程式碼部分---結束
}
4.2.3. insert一組資料
//2個教師和3個學生的關係
//教師1,帶學生1、2
//教師2,帶學生1、3
//學生1,選修教師1和教師2的課
List<TeacherBean> teacherList = new ArrayList<TeacherBean>();
for (long i = 1; i < 3; i++) {
TeacherBean teacherBean = new TeacherBean();
teacherBean.setId(i);
teacherList.add(teacherBean);
}
GreenDaoUtil.getDaoSession(activity).getTeacherBeanDao().insertInTx(teacherList);
List<StudentBean> studentList = new ArrayList<StudentBean>();
for (long j = 1; j < 4; j++) {
StudentBean studentBean = new StudentBean();
studentBean.setId(j);
studentList.add(studentBean);
}
GreenDaoUtil.getDaoSession(activity).getStudentBeanDao().insertInTx(studentList);
List<TeacherJoinStudentBean> teacherJoinStudentList = new ArrayList<TeacherJoinStudentBean>();
//教師1帶學生1、2
TeacherJoinStudentBean teacherJoinStudentBean1 = new TeacherJoinStudentBean(null,1l,1l);
teacherJoinStudentList.add(teacherJoinStudentBean1);
TeacherJoinStudentBean teacherJoinStudentBean2 = new TeacherJoinStudentBean(null,1l,2l);
teacherJoinStudentList.add(teacherJoinStudentBean2);
//教師2帶學生1、3
TeacherJoinStudentBean teacherJoinStudentBean3 = new TeacherJoinStudentBean(null,2l,1l);
teacherJoinStudentList.add(teacherJoinStudentBean3);
TeacherJoinStudentBean teacherJoinStudentBean4 = new TeacherJoinStudentBean(null,2l,3l);
teacherJoinStudentList.add(teacherJoinStudentBean4);
GreenDaoUtil.getDaoSession(activity).getTeacherJoinStudentBeanDao().insertInTx(teacherJoinStudentList);
4.3. 結語(多對多)
- 關於id的繫結,注意以上示例程式碼註釋
- 說實話多對多比較坑,感覺沒什麼使用的必要,可能我還沒遇到能用到的專案,如果你有好的例子,歡迎留言連結