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 一切顺利的话则会在包名下生成数据库的操作类,如下图:


三、使用方法

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

  1. package com.jackie.greendao;  
  2.   
  3. import android.os.Bundle;  
  4. import android.support.v7.app.AppCompatActivity;  
  5. import android.view.View;  
  6. import android.widget.Button;  
  7. import android.widget.EditText;  
  8. import android.widget.ListView;  
  9.   
  10. import java.util.List;  
  11.   
  12. public class MainActivity extends AppCompatActivity implements View.OnClickListener {  
  13.     private EditText mName, mAge;  
  14.     private Button mAdd;  
  15.     private ListView mListView;  
  16.   
  17.     private DaoMaster.DevOpenHelper mDevOpenHelper;  
  18.     private DaoMaster mDaoMaster;  
  19.     private DaoSession mDaoSession;  
  20.     private PersonDao mPersonDao;  
  21.   
  22.     @Override  
  23.     protected void onCreate(Bundle savedInstanceState) {  
  24.         super.onCreate(savedInstanceState);  
  25.         setContentView(R.layout.activity_main);  
  26.   
  27.         initView();  
  28.         initEvent();  
  29.   
  30.         openDb();  
  31.     }  
  32.   
  33.     private void initView() {  
  34.         mName = (EditText) findViewById(R.id.name);  
  35.         mAge = (EditText) findViewById(R.id.age);  
  36.         mAdd = (Button) findViewById(R.id.add);  
  37.         mListView = (ListView) findViewById(R.id.list_view);  
  38.     }  
  39.   
  40.   
  41.     private void initEvent() {  
  42.         mAdd.setOnClickListener(this);  
  43.     }  
  44.   
  45.     private void openDb() {  
  46.         mDevOpenHelper = new DaoMaster.DevOpenHelper(this"person.db"null);  
  47.         mDaoMaster = new DaoMaster(mDevOpenHelper.getWritableDb());  
  48.         mDaoSession = mDaoMaster.newSession();  
  49.         mPersonDao = mDaoSession.getPersonDao();  
  50.     }  
  51.   
  52.     //插入  
  53.     public void insert() {  
  54.         Person person = new Person(Long.valueOf(1), mName.getText().toString(),   
  55.                 Integer.parseInt(mAge.getText().toString()));  
  56.         mPersonDao.insert(person);  
  57.   
  58.         mName.setText("");  
  59.         mAge.setText("");  
  60.     }  
  61.   
  62.     public void delete(Person person) {  
  63.         mPersonDao.delete(person);  
  64.     }  
  65.   
  66.     //更新  
  67.     public void update(Person person) {  
  68.         mPersonDao.insertOrReplace(person);  
  69.     }  
  70.   
  71.     //查询  
  72.     public void query() {  
  73.         List<Person> persons = mPersonDao.queryBuilder().list();  
  74.     }  
  75.   
  76.     @Override  
  77.     public void onClick(View view) {  
  78.         switch (view.getId()) {  
  79.             case R.id.add:  
  80.                 insert();  
  81.                 break;  
  82.         }  
  83.     }  
  84. }  
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()方法中打开下面的开关:


五、条件查询

  1. //查询所有数据  
  2. public void queryAll() {  
  3.     List<Person> persons = mPersonDao.queryBuilder().list();  
  4. }  
  5.   
  6. //eq: equal 精确查询  名字等于jackie  
  7. public void queryEq() {  
  8.     Person person = mPersonDao.queryBuilder().where(PersonDao.Properties.Name.eq("jackie")).unique();  
  9. }  
  10.   
  11. //notEq: not equal 精确查询  名字不等于jackie  
  12. public void queryNotEq() {  
  13.     Person person = mPersonDao.queryBuilder().where(PersonDao.Properties.Name.notEq("jackie")).unique();  
  14. }  
  15.   
  16. //like  模糊查询  名字以jackie开头  
  17. public void queryLike() {  
  18.     Person person = mPersonDao.queryBuilder().where(PersonDao.Properties.Name.like("jackie")).unique();  
  19.     //通配符  
  20.     List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Name.like("jackie%")).list();  
  21. }  
  22.   
  23. //between 区间查询 年龄在20到30之间  
  24. public void queryBetween() {  
  25.     List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Age.between(2030)).list();  
  26. }  
  27.   
  28. //gt: greater than 半开区间查询,年龄大于18  
  29. public void queryGt() {  
  30.     List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Age.gt(18)).list();  
  31. }  
  32.   
  33. //ge: greater equal 半封闭区间查询,年龄大于或者等于18  
  34. public void queryGe() {  
  35.     List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Age.ge(18)).list();  
  36. }  
  37.   
  38. //lt: less than 半开区间查询,年龄小于18  
  39. public void queryLt() {  
  40.     List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Age.lt(18)).list();  
  41. }  
  42.   
  43. //le: less equal 半封闭区间查询,年龄小于或者等于18  
  44. public void queryLe() {  
  45.     List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Age.le(18)).list();  
  46. }  
  47.   
  48. //名字以jackie开头,年龄升序排序  
  49. public void queryLikeAsc() {  
  50.     //通配符  
  51.     List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Name.like("jackie%")).orderAsc(PersonDao.Properties.Age).list();  
  52. }  
  53.   
  54. //名字以jackie开头,年龄降序排序  
  55. public void queryLikeDesc() {  
  56.     List<Person> persons = mPersonDao.queryBuilder().where(PersonDao.Properties.Name.like("jackie%")).orderDesc(PersonDao.Properties.Age).list();  
  57. }  
    //查询所有数据
    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查询



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值