参考博客:
http://blog.youkuaiyun.com/zxm317122667/article/details/73528387
http://blog.youkuaiyun.com/cjm2484836553/article/details/78279493
假如在实体类A中有一种List类型的数据也需要保存到数据库中,该如何处理呢??**
答案很简单,可以转换一下思路,首先考虑下如果是String类型的数据,首先遍历List数据,然后将所有的String对象都append到一个StringBuilder中,然后保存在数据库中即可。
事实上,GreenDao已经为我们考虑到了这种情况,因此才有了 PropertyConverter 这个接口
在PropertyConverter接口中,有两个需要实现的抽象方法
//将数据库中的值,转化为实体Bean类对象(比如List<String>)
P convertToEntityProperty(D databaseValue);
//将实体Bean类(比如List<String>)转化为数据库中的值(比如String)
D convertToDatabaseValue(P entityProperty);
举个例子:
public class StringConverter implements PropertyConverter<List<String>, String>{
@Override
public List<String> convertToEntityProperty(String databaseValue) {
if (databaseValue == null) {
return null;
}
else {
List<String> list = Arrays.asList(databaseValue.split(","));
return list;
}
}
@Override
public String convertToDatabaseValue(List<String> entityProperty) {
if(entityProperty==null){
return null;
}
else{
StringBuilder sb= new StringBuilder();
for(String link:entityProperty){
sb.append(link);
sb.append(",");
}
return sb.toString();
}
}
}
如果list中含自定义的类B怎么办呢?
从网上看到一个很好的处理办法: 使用json!json作为客户端和服务端之间数据传递的载体,不仅能满足我们现在的业务需求,而且我们还有gson这个解析框架来帮我们做转换!简直不要更简单。
举个例子:
package com.greendaotest1204.bean;
import com.google.gson.Gson;
import org.greenrobot.greendao.converter.PropertyConverter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Author:wang_sir
* Time:2017/12/4 11:22
* Description:This is B_Converter
*/
public class B_Converter implements PropertyConverter<List<B>, String> {
@Override
public List<B> convertToEntityProperty(String databaseValue) {
if (databaseValue == null) {
return null;
}
List<String> list_str = Arrays.asList(databaseValue.split(","));
List<B> list_transport = new ArrayList<>();
for (String s : list_str) {
list_transport.add(new Gson().fromJson(s, B.class));
}
return list_transport;
}
@Override
public String convertToDatabaseValue(List<B> arrays) {
if (arrays == null) {
return null;
} else {
StringBuilder sb = new StringBuilder();
for (B array : arrays) {
String str = new Gson().toJson(array);
sb.append(str);
sb.append(",");
}
return sb.toString();
}
}
}
A类中list需要转换
@Convert(columnType = String.class, converter = B_Converter.class)
private List<B> transportDescriptions;
A类中部分代码
@Entity
public class A {
@Id
private Long id;
@Unique
private String transportNo;//配送单号
@Convert(columnType = String.class, converter = B_Converter.class)
private List<B> transportDescriptions;
@NotNull
private String transportType;//物流类型
private String transportPeople;//配送人
private String transportPeopleMobile;//配送人电话
private String transportTime;//配送时间
private String transportInfo;//配送详情
private String petName;//会员名