GreenDao保存List和实体类类型数据

在上一章中介绍了如何简单使用GreenDao,并创建了实体类来保存一些简单的数据。
但是假如在实体类中有一种List类型的数据也需要保存到数据库中,该如何处理呢??

答案很简单,可以转换一下思路,遍历List数据,然后将所有的String对象都append到一个StringBuilder中,然后保存在数据库中即可。
事实上,GreenDao已经为我们考虑到了这种情况,因此才有了 PropertyConverter 这个接口

在PropertyConverter接口中,有两个需要实现的抽象方法

//将数据库中的值,转化为实体Bean类对象(比如List<String>)
P convertToEntityProperty(D databaseValue);

//将实体Bean类(比如List<String>)转化为数据库中的值(比如String)
D convertToDatabaseValue(P entityProperty);

具体实现如下所示:

@Entity
public class User {
    @Id(autoincrement = true)//设置自增长
    private Long id;

    @Index(unique = true)//设置唯一性
    private String perNo;//人员编号

    private String name;//人员姓名

    private String sex;//人员姓名

//用到了这个Convert注解,表明它们的转换类,这样就可以转换成String保存到数据库中了
  @Convert(columnType = String.class, converter = Level_Converter.class)
    private List<JavaBean> levelReport; //实体类中list数据

 @Convert(columnType = String.class, converter = Temp_Converter.class)
    private TempReport maxTemp;//实体类套实体类

保存的List类型数据转换类

public class Level_Converter implements PropertyConverter<List<JavaBean>, String> {
    @Override
    public List<JavaBean> convertToEntityProperty(String databaseValue) {
        if (databaseValue == null) {
            return null;
        }
        // 先得获得这个,然后再typeToken.getType(),否则会异常
        TypeToken<List<JavaBean>> typeToken = new TypeToken<List<JavaBean>>(){};
        return new Gson().fromJson(databaseValue, typeToken.getType());
    }

    @Override
    public String convertToDatabaseValue(List<JavaBean> arrays) {
        if (arrays == null||arrays.size()==0) {
            return null;
        } else {
            String sb = new Gson().toJson(arrays);
            return sb;

        }
    }

保存的实体类转换类

public class Temp_Converter implements PropertyConverter<TempReport, String> {
    @Override
    public TempReport convertToEntityProperty(String databaseValue) {
        return new Gson().fromJson(databaseValue, TempReport.class);
    }

    @Override
    public String convertToDatabaseValue(TempReport entityProperty) {
        return new Gson().toJson(entityProperty);
    }
}

这里是用到的Gson解析的,用其他解析当然也是可以的,这个转换类实现的PropertyConverter接口,里面有两个方法,很好理解,String转JavaBean 和JavaBean转String。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容