GreenDao数据库的优势

1.存取速度快;

2.支持数据库加密;

3.轻量级;

4.激活实体;

5.支持缓存;

6.代码自动生成;

GreenDao集成

第一步:在项目的.gradle文件里面添加

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
    }
}

第二步:在moddle的.gradle文件里面添加

添加:apply plugin: 'org.greenrobot.greendao'

greendao {
    schemaVersion 1
    daoPackage 'com.xxxx.xxxx.greendao'
    targetGenDir 'src/main/java'
}

添加依赖库

compile 'org.greenrobot:greendao:3.2.2'

第三步:添加Bean类,用TestBean举例子 , 一定要记得注解@Entity 

@Entity
public class TestBean {    
    @Id(autoincrement = true)
    private long id;
    private String name;
    private int sex;
    private int age;
    private String phone;
}

配置完成,在Android Studio中使用Build -> Make Project(快捷键Ctrl+F9),自动生成,GreenDao集成完成!

Android 配置greendao 安卓green_Android 配置greendao

第四步:新建数据库初始化类DbManager.java

public class DbManager {

    private static final String DB_NAME = "test.db";

    private DaoMaster.DevOpenHelper mHelper;
    private SQLiteDatabase db;
    private DaoMaster mDaoMaster;
    private DaoSession mDaoSession;

    private static DbManager mDbManager;

    public static DbManager getInstance() {
        if (null == mDbManager) {
            synchronized (DbManager.class) {
                if (null == mDbManager) {
                    mDbManager = new DbManager();
                }
            }
        }
        return mDbManager;
    }

    public void init(Context context){
        // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。
        // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。
        // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。
        // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。
        mHelper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);
        db = mHelper.getWritableDatabase();
        // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
        mDaoMaster = new DaoMaster(db);
        mDaoSession = mDaoMaster.newSession();
    }

    public DaoSession getDaoSession() {
        return mDaoSession;
    }

    public SQLiteDatabase getDB() {
        return db;
    }
}

第五步:增,删,查,改

TestBean testBean=new TestBean();
testBean.setName("大毛");
testBean.setPhone("13600000001");

TestBeanDao testBeanDao=DbManager.getInstance().getDaoSession().getTestBeanDao();

//插入数据
testBeanDao.insert(testBean);
//数据存在则替换,数据不存在则插入
testBeanDao.insertOrReplace(testBean);

//条件查询10条数据
List<TestBean> list=testBeanDao.queryBuilder().where(TestBeanDao.Properties.Name.eq("大毛")).limit(10).build().list();

//查询全部
List<TestBean> list2=testBeanDao.queryBuilder().build().list();

//删除
testBeanDao.delete(testBean);
testBeanDao.deleteByKey(testBeanDao.getKey(testBean));
//删除全部
testBeanDao.deleteAll();
DbManager.getInstance().getDaoSession().deleteAll(TestBean.class);

//修改
DbManager.getInstance().getDaoSession().update(testBean);

GreenDao常用注解:摘自:https://www.jianshu.com/p/fc37ea64add0

  1. @Entity -- 实体注解
  2. @NotNull-- 设置表中当前列的值不可为空
  3. @Convert-- 指定自定义类型(@link PropertyConverter)
  4. @Generated-- GreenDao运行所产生的构造函数或者方法,被此标注的代码可以变更或者下次运行时清除
  5. @Id-- 主键 Long型,可以通过@Id(autoincrement = true)设置自增长。通过这个注解标记的字段必须是Long,数据库中表示它就是主键,并且默认是自增的。
  6. @Index-- 使用@Index作为一个属性来创建一个索引;定义多列索引(@link Entity#indexes())
  7. @JoinEntity-- 定义表连接关系
  8. @JoinProperty-- 定义名称和引用名称属性关系
  9. @Keep-- 注解的代码段在GreenDao下次运行时保持不变 1.注解实体类:默认禁止修改此类 2.注解其他代码段,默认禁止修改注解的代码段
  10. @OrderBy-- 指定排序
  11. @Property-- 设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property (nameInDb="name")
  12. @ToMany-- 定义与多个实体对象的关系
  13. @ToOne-- 定义与另一个实体(一个实体对象)的关系
  14. @Transient-- 添加次标记之后不会生成数据库表的列
  15. @Unique-- 向数据库列添加了一个唯一的约束