DbFlow的使用
配置
allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" }
}
}
annotationProcessor "com.github.Raizlabs.DBFlow:dbflow-processor:4.0.0-beta7"
compile "com.github.Raizlabs.DBFlow:dbflow-core:4.0.0-beta7"
compile "com.github.Raizlabs.DBFlow:dbflow:4.0.0-beta7"
在自己的Application中配置
@Override
public void onCreate() {
super.onCreate();
FlowManager.init(this);
}
數(shù)據(jù)庫的創(chuàng)建 版本號和名稱
@Database(name = MyDataBase.DATABASE_NAME,version = MyDataBase.DATABASE_VERSION)
public class MyDataBase {
public static final String DATABASE_NAME="MyDatabase";
public static final int DATABASE_VERSION=1;
}
表的創(chuàng)建,至少有一個主鍵
@Table(database = MyDataBase.class)
public class User extends BaseModel{
@Column
@PrimaryKey(autoincrement = true) //主鍵自增長
long id;
@Column
String name;
@Column
String sex;
@Column
int age;
@Column
Date date;
}
1.對象直接操作記錄 extends BaseModel or implement Model
同一個對象的話 保存的是同一條記錄,如下只會在數(shù)據(jù)庫插入同一條記錄
User user = new User();
user.age=90;
user.save(); //調(diào)用save保存記錄
user.name="wang";
user.date=new Date(); //同一個user對象的話是一條記錄
user.save();
user.delete(); //刪除本條對象所保存的記錄
user.update();//更新本條對象所保存的記錄
一般是先 user.save();//先保存 user.update();再更新
如果沒有 user.save();直接 user.update();的話是不會增加記錄
同理 先 user.save();之后 其他的update(),delete()方法才有意義. 但實際發(fā)現(xiàn)
調(diào)用 user.save()之后 ,再次修改user 的屬性 再次調(diào)用user.save()方法,發(fā)現(xiàn)操縱的其實是同一條記錄 ,此時第二次的save()方法也就相當(dāng)于了update();
2.利用 ModelAdapter
ModelAdapter<User> adapter = FlowManager.getModelAdapter(User.class);
adapter.insert(user); //最好不要和adapter.save(user)一塊使用,且連續(xù)調(diào)用兩次insert(user)會保存兩次記錄,而連續(xù)save(user)兩次的話只會插入一條記錄
user.name = "Not Andrew Grosner";
adapter.update(user);
adapter.delete(user);
關(guān)于查詢
List < User > wang = SQLite.select().from(User.class).where(User_Table.name.is("wang")).queryList(); //查詢的是整個表中符合條件的
User wang = SQLite.select().from(User.class).where(User_Table.name.is("wang")).querySingle(); //查詢的是第一個符合條件的
刪除的話 先查 再刪
List<User> wang = SQLite.select().from(User.class).where(User_Table.name.is("wang")).queryList();
for (User usersing:wang) {
usersing.delete();
Log.e("msg:", usersing.toString());
}
在事務(wù)中
同步
FlowManager.getDatabase(MyDataBase.class).executeTransaction(new ITransaction() {
@Override
public void execute(DatabaseWrapper databaseWrapper) {
ModelAdapter<User> adapter = FlowManager.getModelAdapter(User.class);
final User user = new User("wang", "女", 11, new Date());
adapter.insert(user);
adapter.insert(user);
}
});
異步
@Override
public void execute(DatabaseWrapper databaseWrapper) {
ModelAdapter<User> adapter = FlowManager.getModelAdapter(User.class);
final User user = new User("wang", "女", 11, new Date());
adapter.insert(user);
adapter.insert(user);
adapter.insert(user);
adapter.insert(user);
adapter.insert(user);
}
}).execute();
或者
Transaction transaction = FlowManager.getDatabase(MyDataBase.class).beginTransactionAsync(new ITransaction() {
@Override
public void execute(DatabaseWrapper databaseWrapper) {
ModelAdapter<User> adapter = FlowManager.getModelAdapter(User.class);
}
}).build();
transaction.execute();
transaction.cancel();