一直没时间写东西,写个网上很少查得到的东西。这个也是研究了好几天dbflow api 才想到的方法。
首先比较下dbflow,litepal吧。litepal轻量级,跟傻瓜相机一样,简单易用,api很简单。
dbflow就比较重了,完全可以当后台数据库用(个人理解)。处理大量的数据也是很快的,但是litepal就比较慢了,3000多条数据的测试。少量数据,两者没啥区别。
下面是 每条狗有多种爱好,而每个爱好有多条狗的例子。当你配置完dbflow环境后,直接拷贝代码就可以用了,模仿写也是没啥问题的。
一、dbflow 使用说明
官方文档:https://agrosner.gitbooks.io/dbflow/content
本app中 数据库版本控制文件:AppDataBase.class
用法一对一 网上很多,不做赘述。
大数据量操作 开启事务文档:
https://agrosner.gitbooks.io/dbflow/content/StoringData.html
一对多:
创建如下三张表
@Table(database = AppDataBase.class)
public class Breed extends BaseModel {
@PrimaryKey
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Table(database = AppDataBase.class)
public class Dog extends BaseModel{
@PrimaryKey(autoincrement = true)
long id;
@Column
String name;
@ForeignKey(stubbedRelationship = true)
Breed breed; // tableClass only needed for single-field refs that are not Model.
List<IntrestIng> intrestIngList;
@OneToMany(methods = {OneToMany.Method.ALL},variableName = "intrestIngList")
public List<IntrestIng> getIntrestIngList(){
if(intrestIngList ==null||intrestIngList.size()==0){
intrestIngList = SQLite.select().from(IntrestIng.class).where(IntrestIng_Table.dog_id.eq(id)).queryList();
}
return intrestIngList;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Breed getBreed() {
return breed;
}
public void setBreed(Breed breed) {
this.breed = breed;
}
public void setList(List<IntrestIng> intrestIngList) {
this.intrestIngList = intrestIngList;
}
}
@Table(database = AppDataBase.class)
public class IntrestIng extends BaseModel {
@PrimaryKey(autoincrement = true)
int id;
@Column
String name;
@ForeignKey(
onUpdate = ForeignKeyAction.CASCADE,
onDelete = ForeignKeyAction.CASCADE,
stubbedRelationship = true,
references = @ForeignKeyReference(columnName = "dog_id", foreignKeyColumnName ="id" )
)
public Dog dog;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public IntrestIng(String name) {
this.name = name;
}
public IntrestIng() {
}
}
保存:
Breed breed = new Breed();
breed.setName("meta");
Dog dog = new Dog();
dog.setName("huang");
dog.setBreed(breed);
List<IntrestIng> list = new ArrayList<>();
IntrestIng ing1 = new IntrestIng("shui");
IntrestIng ing2 = new IntrestIng("chi");
ing1.setDog(dog);
ing2.setDog(dog);
list.add(ing1);
list.add(ing2);
dog.setList(list);
boolean save =dog.save();
查找:
List<Dog> dogList = SQLite.select().from(Dog.class).where(Dog_Table.name.eq("huang")).queryList();