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