ORM框架--GreenDao 3.0基本使用指南

0. ORM框架--GreenDao 3.0基本使用指南

1. Gradle 的配置

这里可以参照官方的文档进行最新的配置(本示例的版本等你看到可能就不是最新的了),但是值得注意的一点是,GreenDao 3.0与之前的变化比较大,所以用法也区别比较大,建议在搜索时加上版本号3.0进行更精细的搜索

在项目(非Module)的build.gradle 文件中:

buildscript {
    repositories {
        jcenter()
        mavenCentral() // 添加仓库地址
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.1'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // 添加greendao插件
    }
}

在Module级别的 build.gradle 文件中:

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // 添加插件
 
dependencies {
    compile 'org.greenrobot:greendao:3.2.2' // 添加库
}

参照官方Github连接: https://github.com/greenrobot/greenDAO 更改为最新配置(示例为3.2.2

2. 配置数据库信息

android {
    ....
    greendao {
        schemaVersion 1
        daoPackage 'com.yourpackagename.greendao.gen'
        targetGenDir 'src/main/java'
        //targetGenDirTest:设置生成单元测试目录
        //generateTests:设置自动生成单元测试用例
    }
    ...
}

daoPackage 'com.yourpackagename.greendao.gen'
指定greendao自动生成文件的存放路径,我个人喜欢起名为greendao.gen
greendao 表示使用的是greendao这个第三方库
gen 表示自动生成,不要手动更改
前面加上自己的包名,这个实际就是一个路径。怎么放按你的习惯和团队规范。

3. 编写实体bean

配置完上面的信息后,点击Sync Now同步一下工程,然后进行实体的编写,这个过程长短依托网络等因素。
注意:
如果同步后没有生成代码,最好的方法就是把项目运行一遍!

/**
 * Created by didikee on 2017/9/7.
 */
@Entity
public class User {

    @Id(autoincrement = true)
    private Long id = null;

    private Long time;
    private String name;
    private Boolean sex;
    @Generated(hash = 1524850927)
    public User(Long id, Long time, String name, Boolean sex) {
        this.id = id;
        this.time = time;
        this.name = name;
        this.sex = sex;
    }
    @Generated(hash = 586692638)
    public User() {
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public Long getTime() {
        return this.time;
    }
    public void setTime(Long time) {
        this.time = time;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Boolean getSex() {
        return this.sex;
    }
    public void setSex(Boolean sex) {
        this.sex = sex;
    }


}

注意点:

  1. 类需要加@Entity注解
  2. id 类型必须为:Long而不是Long(这个两个的区别大家肯定知道,容易手误而已,倒是插入数据崩溃)
  3. 如果要实现id自增,在创建实体时id为null即可。

4. 开始操作数据

我习惯写个统一的类管理各类实体Dao

/**
 * Created by didikee on 2017/7/19.
 */

public class GreenDaoManager {
    private final static String dbName = "d_db";
    private static GreenDaoManager mInstance;
    private DaoMaster.DevOpenHelper openHelper;
    private Context context;

    private GreenDaoManager(Context context) {
        this.context = context;
        openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
    }

    /**
     * 获取单例引用
     * @param context
     * @return
     */
    public static GreenDaoManager getInstance(Context context) {
        if (mInstance == null) {
            synchronized (GreenDaoManager.class) {
                if (mInstance == null) {
                    mInstance = new GreenDaoManager(context);
                }
            }
        }
        return mInstance;
    }

    public InstaMediaDao getInstaMediaDao() {
        SQLiteDatabase writableDatabase = openHelper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(writableDatabase);
        DaoSession daoSession = daoMaster.newSession();
        return daoSession.getInstaMediaDao();
    }
    public UserDao getUserDao() {
        SQLiteDatabase writableDatabase = openHelper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(writableDatabase);
        DaoSession daoSession = daoMaster.newSession();
        return daoSession.getUserDao();
    }

}

使用就比较简单了,调用对用实体Bean对应的Dao的方法即可。
例如,查询:

GreenDaoManager.getInstance(this).getUserDao().queryRaw(String where, String... selectionArg);

其他的增删改查就是api的熟悉问题了,基本上也和sqlite差不多,习惯就ok了。
网上其他的教程很多,也可参考。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容