Android Studio配置GreenDAO 3.2.0和使用方法

我相信,在平时的开发过程中,大家一定会或多或少地接触到SQLite。然而在使用它时,我们往往需要做许多额外的工作,像编写SQL语句与解析查询结果等。所以,适用于Android ORM框架也就孕育而生了,现在市面上主流的框架有OrmLite、SugarORM、Active Android、Realm与GreenDAO。今天主要来讲一下GreenDAO 3.0G后的版本是怎么在Android Studio上配置的。
简单的讲,GreenDAO是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案。(greenDAO is a light & fast ORM solution that maps objects to SQLite databases.) 。

Android ORM 框架之 greenDAO 使用心得

一、配置方法

1.直接开始配置,首先找到这个Library,如下图:

2. 找到相应Module的build.gradle文件,添加的下面的内容:

说明:第三步配置的是生成的数据库操作模板代码的路径。

3.找到Project的build.gradle文件,添加下面的内容:

至此 配置就完成了,下来就开始生成数据库并使用。

GreenDAO 3.0之前的配置方式可以这里查看。

二、生成数据库操作DAO代码

1.在项目中新建一个表字段的实体类,不需要自己写get和set方法,在生成表的时候会自动生成。不要忘了在类名上标记@Entity注解如图: 

2.选择build ——Make Project 一切顺利的话则会在包名下生成数据库的操作类,如下图:

三、使用方法

数据库的操作包括增删改改查,方法如下:

package com.jackie.greendao;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private EditText mName, mAge;
    private Button mAdd;
    private ListView mListView;

    private DaoMaster.DevOpenHelper mDevOpenHelper;
    private DaoMaster mDaoMaster;
    private DaoSession mDaoSession;
    private PersonDao mPersonDao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
        initEvent();

        openDb();
    }

    private void initView() {
        mName = (EditText) findViewById(R.id.name);
        mAge = (EditText) findViewById(R.id.age);
        mAdd = (Button) findViewById(R.id.add);
        mListView = (ListView) findViewById(R.id.list_view);
    }


    private void initEvent() {
        mAdd.setOnClickListener(this);
    }

    private void openDb() {
        mDevOpenHelper = new DaoMaster.DevOpenHelper(this, "person.db", null);
        mDaoMaster = new DaoMaster(mDevOpenHelper.getWritableDb());
        mDaoSession = mDaoMaster.newSession();
        mPersonDao = mDaoSession.getPersonDao();
    }

    //插入
    public void insert() {
        Person person = new Person(Long.valueOf(1), mName.getText().toString(), 
                Integer.parseInt(mAge.getText().toString()));
        mPersonDao.insert(person);

        mName.setText("");
        mAge.setText("");
    }

    public void delete(Person person) {
        mPersonDao.delete(person);
    }

    //更新
    public void update(Person person) {
        mPersonDao.insertOrReplace(person);
    }

    //查询
    public void query() {
        List<Person> persons = mPersonDao.queryBuilder().list();
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.add:
                insert();
                break;
        }
    }
}

四、查询功能

GreeDAO提供了各种各种的查询API,参见http://greenrobot.org/greendao/documentation/queries/

如果需要在控制台查看GreenDao是怎么拼装SQL语句的,在OnCreate()方法中打开下面的开关:

五、条件查询

    //查询所有数据
    public void queryAll() {
        List<Person> persons = mPersonDao.queryBuilder().list();
    }

    //eq: equal 精确查询  名字等于jackie
    public void queryEq() {
        Person person = mPersonDao.queryBuilder().where(PersonDao.Properties.Name.eq("jackie")).unique();
    }

    //notEq: not equal 精确查询  名字不等于jackie
    public void queryNotEq() {
        Person person = mPersonDao.queryBuilder().where(PersonDao.Properties.Name.notEq("jackie")).unique();
    }

    //like  模糊查询  名字以jackie开头
    public void queryLike() {
        Person person = mPersonDao.queryBuilder().where(PersonDao.Properties.Name.like("jackie")).unique();
        //通配符
        List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Name.like("jackie%")).list();
    }

    //between 区间查询 年龄在20到30之间
    public void queryBetween() {
        List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Age.between(20, 30)).list();
    }

    //gt: greater than 半开区间查询,年龄大于18
    public void queryGt() {
        List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Age.gt(18)).list();
    }

    //ge: greater equal 半封闭区间查询,年龄大于或者等于18
    public void queryGe() {
        List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Age.ge(18)).list();
    }

    //lt: less than 半开区间查询,年龄小于18
    public void queryLt() {
        List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Age.lt(18)).list();
    }

    //le: less equal 半封闭区间查询,年龄小于或者等于18
    public void queryLe() {
        List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Age.le(18)).list();
    }

    //名字以jackie开头,年龄升序排序
    public void queryLikeAsc() {
        //通配符
        List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Name.like("jackie%")).orderAsc(PersonDao.Properties.Age).list();
    }

    //名字以jackie开头,年龄降序排序
    public void queryLikeDesc() {
        List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Name.like("jackie%")).orderDesc(PersonDao.Properties.Age).list();
    }

当上述查询满足不了业务逻辑时,可以自定义查询语句:

六、多线程查询

首先来看错误的方法:

错误截图:

从上面可以看出,只能在创建Query对象的线程中调用查询方法!

解决方法:

七、1对1查询


 

原文地址:https://www.cnblogs.com/zhujiabin/p/7490040.html