greendao存储嵌套数据

简介: 使用greendao存储数据过程中,我们会遇到bean嵌套的情况,这种情况怎么处理呢?我们需要用到greendao提供的`PropertyConverter`来处理。

使用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后面的泛型参数即可。

相关文章
|
8月前
|
存储 关系型数据库 MySQL
lodash库——封装好的collection集合函数
lodash库——封装好的collection集合函数
132 0
|
7月前
|
存储 安全 Java
提升编程效率的利器: 解析Google Guava库之集合篇Table二维映射(四)
提升编程效率的利器: 解析Google Guava库之集合篇Table二维映射(四)
|
存储 关系型数据库 MySQL
lodash库_封装好的collection集合函数
lodash库_封装好的collection集合函数
155 0
关于GreenDao更改数据结构,导致报错
关于GreenDao更改数据结构,导致报错
|
Java 数据库连接 数据库
MyBatis框架:第八章:自定义结果集,一对一,一对多,延迟加载,赖加载
MyBatis框架:第八章:自定义结果集,一对一,一对多,延迟加载,赖加载
184 0
MyBatis框架:第八章:自定义结果集,一对一,一对多,延迟加载,赖加载
|
XML 存储 JSON
多叉树结合JavaScript树形组件实现无限级树形结构(一种构建多级有序树形结构JSON(或XML)数据源的方法)
如何将数据库中的层次数据转换成对应的层次结构的JSON或XML格式的字符串,返回给客户端的JavaScript树形组件?这就是我们要解决的关键技术问题。
多叉树结合JavaScript树形组件实现无限级树形结构(一种构建多级有序树形结构JSON(或XML)数据源的方法)
|
存储
类的本质及其存储
在实际开发、学习、面试中,经常提到类这个概念,了解类的本质及其存储非常重要,这篇文章以简单实例介绍了类
221 0
类的本质及其存储
|
Dart
dart - 如何制作新数组嵌套排序映射
今天关注的人突然多了起来,为此继续更新今天的第二篇 dart - 如何制作新数组嵌套排序映射? 我有一个看起来像这样的数据块:
169 0
dart - 如何制作新数组嵌套排序映射
|
关系型数据库 PostgreSQL
PostgreSQL 自定义复合类型(composite type) deform引入的额外开销
标签 PostgreSQL , UDT , 自定义类型 背景 PG 允许用户自定义复合类型,自定义复合类型由多个类型组成,使用时会引入一些deform的开销。 例子 postgres=# create unlogged table t(id int, c1 tp1, c2 int); C...
2362 0