美文网首页
GreenDao保存List和实体类类型数据

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

作者: 苏墨白梦觉泪满青衫湿 | 来源:发表于2019-02-11 15:07 被阅读0次

    在上一章中介绍了如何简单使用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。

    相关文章

      网友评论

          本文标题:GreenDao保存List和实体类类型数据

          本文链接:https://www.haomeiwen.com/subject/gssqeqtx.html