使用greendao存儲數據過程中,我們會遇到bean嵌套的情況,這種情況怎麼處理呢?我們需要用到greendao提供的PropertyConverter
來處理。
原始數據
我們假設我們存儲對象是CacheBean,它有個成員變量叫SubCachedBean,代碼如下:
@Entity
public class CachedBean {
private int count;
private SubCachedBean subCachedBean;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public SubCachedBean getSubCachedBean() {
return subCachedBean;
}
public void setSubCachedBean(SubCachedBean subCachedBean) {
this.subCachedBean = subCachedBean;
}
@Override
public String toString() {
return "CachedBean{" +
"count=" + count +
", subCachedBean=" + subCachedBean +
'}';
}
}
public class SubCachedBean {
private String name;
private String gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "SubCachedBean{" +
"name='" + name + '\'' +
", gender='" + gender + '\'' +
'}';
}
}
此時我們只給CachedBean添加了@Entity
註解,SubCachedBean的數據是無法存儲的。
使用PropertyConverter
進行轉換
我們針對SubCachedBean類,創建一個對應的PropertyConverter,將其轉換爲String,具體如下:
public class SubCachedBeanConverter implements PropertyConverter<SubCachedBean, String> {
@Override
public SubCachedBean convertToEntityProperty(String databaseValue) {
return JSON.parseObject(databaseValue, SubCachedBean.class);
}
@Override
public String convertToDatabaseValue(SubCachedBean entityProperty) {
return JSON.toJSONString(entityProperty);
}
}
接着我們在引用SubCachedBean對象的地方,添加對應的註解即可,代碼如下:
@Convert(converter = SubCachedBeanConverter.class, columnType = String.class)
private SubCachedBean subCachedBean;
同理,針對List類型的數據也一樣,只需要替換下PropertyConverter後面的泛型參數即可。