最好用的安卓数据库DBFlow的使用方法

什么是DBFlow?

Raizlabs公司开发的ORM(Object-relational mapping)库。

DBFlow是一种使用注解(@~)来进行表单的定义等数据库处理,并将这些处理简化的安卓数据库框架。

DBFlow最出名的就是它的处理速度

※Raizlabs公司发布的処理速度比较结果

Results

《最好用的安卓数据库DBFlow的使用方法》 complextrial.png
《最好用的安卓数据库DBFlow的使用方法》 complextrialv1.png
《最好用的安卓数据库DBFlow的使用方法》 simpletrial.png
《最好用的安卓数据库DBFlow的使用方法》 simpletrialv1.png

DBFlow的导入

导入方法、使用方法官方文档

DBFlow的导入需要做以下修改

  • build.gradle(Project)
    dependencies内添加以下内容。
dependencies {
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.7'
}
  • build.gradle(app)
dependencies {
    apt 'com.raizlabs.android:DBFlow-Compiler:2.2.1'
    compile "com.raizlabs.android:DBFlow-Core:2.2.1"
    compile "com.raizlabs.android:DBFlow:2.2.1"
}

DBFlow的使用方法

使用DBFlow需要追加2~3个新类。

  1. DBFlow初期化类(MyAppilcation.java)
  2. 数据库宣言类(AppDatabase.java)
  3. 表格宣言类(User.java)

DBFlow初期化

FlowManager.init(this)初期化。

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        FlowManager.init(this);
    }
}

不要忘记AndroidManifest.xml里application标签的追加。


 <application
        android:name=".MyApplication" />
 </application>

数据库的定义

@Database(name = AppDatabase.NAME, version = AppDatabase.VERSION)
public class AppDatabase {

    public static final String NAME = "AppDatabase";

    public static final int VERSION = 1;

}

表格的定义

注解

属性(列)@Column、主键(Primary Key)@PrimaryKey

@Table(databaseName = AppDatabase.NAME, tableName = "USER_TABLE")
public class User extends BaseModel { 

    @Column
    @PrimaryKey(autoincrement = true)
    int id;

    @Column(name = "NAME")
    public String name;

    @Column(name = "AGE")
    public int age;

}

查询语句的书写

  • Insert文
        User user = new User();
        user.name = "takenoki";
        user.age = 20;
        user.insert();
  • Select文
select NAME from USER_TABLE where NAME = "takenoki";

上面的SQL文在DBFlow里用使用以下语句。

     List<User> list = new Select()
                .from(User.class)
                .where(Condition.column(User$Table.NAME).is(name))
                .queryList();

想取名和年龄都一致的数据的话

     List<User> list = new Select()
                .from(User.class)
                .where(
                    Condition.column(User$Table.NAME).is(name),
                    Condition.column(User$Table.AGE).is(age)
                 )
                .queryList();

结果放在listView里表示的时候

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_sample, container, false);

        String name = "takenoki";
        int age = 20;

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                act,
                android.R.layout.simple_list_item_1
        );

        List<User> list = new Select()
                .from(User.class)
                .where(Condition.column(User$Table.USER_NAME).is(name))
                .queryList();

        for (int i = 0; i < list.size(); i++) {
            adapter.add(String.valueOf(list.get(i).age));
        }

        listView.setAdapter(adapter);

        return view;
    }

    原文作者:wangyf0620
    原文地址: https://www.jianshu.com/p/376c4e20517b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞