greendao存儲嵌套數據

使用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後面的泛型參數即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章