Greendao 3.2一步步教你到使用,看完必会(附Demo)

本人使用greendao一年,现在公司依然使用该框架,网上东抄西凑,资料杂七杂八,我顺便就写编博客给大家一起看看。现在我也在使用realm,realm也是非常不错的框架,过些天会再给大家写一篇奉献给想学realm的朋友们。

官方网站:http://greenrobot.org/greendao
官方github网址:https://github.com/greenrobot/greenDAO

首先奉上官方对greendao的介绍(工具翻译而来):

greenDAO特性 对象/关系映射(ORM)

greenDAO Android ORMgreenDAO的本质是提供一个面向对象的接口数据存储在关系数据库SQLite。
数据模型定义,greenDAO将创建Java数据对象(实体)和DAOs( 数据访问对象 )。 这将节省你很多无聊的代码,只是来回移动数据。
除此之外,greenDAO报价 一些先进的ORM特性 像一个会话缓存,立即加载和活跃的实体。

性能

orm我们知道,greenDAO是最快的。 关于性能greenDAO不做任何妥协。 数据库用于存储大量的数据,因此速度很重要。
使用greenDAO,大多数实体可以插入、更新和加载速度 每秒几千实体 。

我们有信心在greenDAO性能和邀请你来比较greenDAO orm。 我们 开源的基准 完全透明。

greenDAO插入和更新实体快2倍左右,并加载实体比ORMLite快4倍左右。 典型的应用程序加载速度是最相关的。
除了greenDAO的高性能核心功能,如一个会话缓存和智能立即加载技术给额外的性能提升。

加密支持

您可以使用与标准greenDAO SQLite,嵌入在Android,或与SQLCipher您可以使用它。 有看吗 数据库加密文档 获取详细信息。

官方说的已经非常强大了,我们还有什么理由不用它呢?(废话不多说,下面开始)

1.Project.gradle配置

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
    }
}

如图
Greendao 3.2一步步教你到使用,看完必会(附Demo)_第1张图片

2. Model.gradle配置

apply plugin: 'org.greenrobot.greendao'

dependencies {
    compile 'org.greenrobot:greendao:3.2.0'
}

我的完整配置:

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao'
android {
    compileSdkVersion 24
    buildToolsVersion "24.0.3"

    defaultConfig {
        applicationId "com.app.example"
        minSdkVersion 14
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }
    greendao {
        schemaVersion 1
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:24.2.0'
    testCompile 'junit:junit:4.12'
    compile 'org.greenrobot:greendao:3.2.0'
}

3.写greendao实体类,运行时会自动创建get,set等方法

@Entity
public class User {

    @Id(autoincrement = true)
    private Long id;
    @Unique()
    private String name;
    private String age;
    private String passWord;
    private String email;
    private String phoneNumber;
    private String description;
}

3.简单的增删改查

首先建立一个全局的单例,这里直接放在Application中,记得在manifest中配置Application android:name=”.App”(例如App.class)

package com.app;

import android.app.Application;
import android.daase.sqlite.SQLiteDaase;

import greendao.DaoMaster;
import greendao.DaoSession;

/**
 * Author:YangBin
 * Time:2016/10/31.
 * Email:[email protected]
 * explain:
 */

public class App extends Application{
    private static DaoSession daoSession;

    @Override
    public void onCreate() {
        super.onCreate();
        setupDaase();
    }

    private void setupDaase() {
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "db-name", null);
        SQLiteDaase db = helper.getWrileDaase();
        DaoMaster daoMaster = new DaoMaster(db);
        daoSession = daoMaster.newSession();
    }

    public static DaoSession getDaoInstant() {
        return daoSession;
    }
}

以下getUserDao()都是App.getDaoSession().getUserDao()

1. 增加(修改也可以用,因为有唯一主键)

  • 单个
    getUserDao().insert(T entity);

    getUserDao().insertOrReplace(user);
  • list多个
    getUserDao().insertInTx(userList);

    getUserDao().insertOrReplaceInTx(userList);

2. 查询(只稍加列举,还有很多查询情况)

  • 全部
    List list = getUserDao().loadAll();

    List list = getUserDao().queryBuilder().list();

  • 单个条件
    .where() .whereOr()

  • 多个条件
    .where(, , ,) .whereOr(, , ,)
  • 排序
    从大到小.orderDesc() 从小到大.orderAsc()
  • 限制当页个数
    .limit()
  • 总个数
  • .count()
  • 例如
        List list;
        QueryBuilder qb = getUserDao().queryBuilder()
                .where(UserDao.Properties.Name.isNotNull(),
                        UserDao.Properties.Name.eq("XiaoMing"),
                        UserDao.Properties.Age.between(20, 30),
                        UserDao.Properties.PhoneNumber.like("177"))
                .whereOr(UserDao.Properties.Age.between(20, 30),
                        UserDao.Properties.PhoneNumber.like("177"))
                .limit(10)
                .orderDesc(UserDao.Properties.Name);
        long count = qb.count();
        list = qb.list();

3. 修改

  • 单个
    getUserDao().update(user);
  • 多个
    getUserDao().updateInTx(userList);

4. 删除

  • 单个
    getTABUserDao().delete(user);
  • 多个
    getUserDao().deleteInTx(userList);
  • ByKey
    getTABUserDao().deleteByKey();

你可能感兴趣的:(greendao,android)