Android 关于greenDao的使用教程

关于greenDao的使用

第一篇How  to get started ? 

原文地址:http://greendao-orm.com/documentation/how-to-get-started/

该教程会带你浏览一个简单的greenDao示例工程。地址:https://github.com/greenrobot/greenDAO,该工程包含两个子工程:

DaoExample和DaoExampleGenerator。你可以clone到本地,运行或者直接在github上直接浏览。

如果你从git仓储中检出了DaoExample,可以直接像Android应用一样运行它。正如你所看到的,它就是一个简单的笔记本。可以添加新的note,

或者点击已存在的note进行删除。


预生成代码和创建表

在src-gen目录下,你可以找到一些已经生成的文件

1)Note.java  一个包含一个Note所有数据的java类。

2)NoteDao.java 一个DAO类,是操作Note 对象的接口。

你可以通过DaoExampleGenerator工程再次生成Note和NoteDao。

使用DaoMaster类可以获得一个方便的SQLiteOpenHelper:

new DaoMaster.DevOpenHelper(this, "notes-db", null)

你不必编写“CREATE TABLE” SQL语句,greenDao会为你完成。


插入和删除Note对象

创建了Note表后,就可以存储一些note到数据库里了。这是在NoteActivity类里完成的。在onCreate方法里,我们准备了一个DAO对象:

1
2
3
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
noteDao = daoSession.getNoteDao();

添加一个新的note到数据库中:

1
2
3
Note note = new Note(null, noteText, comment, new Date());
noteDao.insert(note);
Log.d("DaoExample", "Inserted new note, ID: " + note.getId());

该示例只是创建并插入了一个java对象。但insert方法返回的时候,数据库的ID已经分发到了刚插入的Note对象上了。在log中可以看到。

删除一条note:非常简单明,在onListItemClick方法中可以看到

1
noteDao.deleteByKey(id);
你也可以看一下其它的DAO方法:loadAll、update。


数据模型化和代码的生成

为了扩展note或者创建新的实体,你可以看一下DaoExampleGenerator工程。它包含了一个单例的类,该类中包含了数据模型的定义代码。

1
2
3
4
5
6
7
Schema schema = new Schema(1, "de.greenrobot.daoexample");
Entity note= schema.addEntity("Note");
note.addIdProperty();
note.addStringProperty("text").notNull();
note.addStringProperty("comment");
note.addDateProperty("date");
new DaoGenerator().generateAll("../DaoExample/src-gen", schema);

正如你所看到的,你可以创建一个Schema对象,通过它你可以添加实体,一个实体连接了一张数据库表。
一个实体包含一些属性,它们可以被映射到数据库的columns。
一旦schema定义完成,你可以触发代码生成器,Note.java和NoteDao.java文件就是这样被创建的。


下一步:

对greenDao有了初步的了解,你可以自己动手试试了。当然,请查看下文档http://greendao-orm.com/documentation/

如果没有找到你想要的,可以使用support options




第二篇 介绍

GreenDao是一个用于Android开发的对象/关系映射(ORM)工具。它向SQLite数据库提供了一个对象导向的接口。像GreenDao这样的ORM工具不仅为你省去了很多的重复工作,而且提供了更简便的操作接口。

代码生成的工程结构图

为了在你的Android项目中使用GreenDao,你需要创建一个二级工程:“generator project”,它的任务就是为你的domain生成具体的代码。这个生成器工程就是一个普通的java工程。确保greenDao 的greenDao-generator.jar和 freemarker.jar 在classpath中。创建一个可执行的java类,构建你的实体模型并触发代码生成器,更多细节,可以参看 modelling文档。

核心类

一旦生成了指定的代码,就可以在你的android工程中使用greenDao了。别忘记在你的android工程中引入greenDao的核心jar包:greenDao.jar。以下是GreenDao的一些必要接口。


DaoMaster:

daomaster以一定的模式持有数据库对象(SQLiteDatabase)并管理一些DAO类(而不是对象)。

有一个静态的方法创建和drop数据库表。它的内部类OpenHelper和DevOpenHelper是SQLiteOpenHelper的实现类,用于创建SQLite数据库的模式。


DaoSession:

管理指定模式下所有可用的DAO对象,你可以通过某个get方法获取到。DaoSession提供一些通用的持久化方法,比如对实体进行插入,加载,更新,刷新和删除。最后DaoSession对象会跟踪identity scope,更多细节,可以参看 session文档。


DAOs(Data access objects):

数据访问对象,用于实体的持久化和查询。对于每一个实体,greenDao会生成一个DAO,相对于DaoSession它拥有更多持久化的方法,比如:加载全部,插入(insertInTx,语境不明了,暂且简单的翻译成插入)。



实体
可持久化的对象。通常,实体可以被生成,不用手动去写。在数据库的行中,使用的都是标准的java对象的属性(比如POJO或者JavaBean)。

1
2
3
4
user.addIdProperty();
user.addStringProperty("name");
user.addStringProperty("password");
user.addIntProperty("yearOfBirth");

在示例中有一个Note实体,通过它的DAO,我们可以对指定的实体进行持久化的操作。


第三篇 实体的模型化

使用greenDao的第一步:创建一个代表持久化数据的实体模型。greenDao会依赖该模型为Dao生成java代码。
该模型本身是用java代码定义的,很简单:在DaoExampleGenerator工程的基础上创建一个java对象。具体你可以参看:
http://greendao-orm.com/documentation/how-to-get-started/

下面的插图描绘了元模型,展示了一些用于描述domain具体模型的类。

Schema

实体数据schema是你定义的第一个对象,通过schema的版本和缺省的java包调用构造器。

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
本文部分翻译了官方对这两个属性的描述。链接如下,此外加入个人的使用体会 https://developer.apple.com/library/ios/qa/qa1754/_index.html 问题的起源,在iOS中,播放声音时,输出到扬声器的需求。两个属性设置的区别 The difference is that setting the AVAudioSessionPortOverride by calling overrideOutputAudioPort: is more transient tha
今天在QQ群里聊天,一个哥们在某宝买到了一个运行内存16G的手机,当时我就吓尿了,所以有了写个程序把这个手机的实际内存读出来的想法,于是就有了今天这篇博客. 所有的信息项如下图所示.(由于我的测试机没有插手机卡,所以有的信息会显示为空) 以下就是代码: package com.liu.chad.practicesqlite;import android.app.ActivityManager;import android.content.Context;import android.os.Bundle;i
什么是函数响应式编程(JavaAndroid版本) 原文链接: http://www.bignerdranch.com/blog/what-is-functional-reactive-programming/ 函数响应式编程(FRP)为解决现代编程问题提供了全新的视角。一旦理解它,可以极大地简化你的项目,特别是处理嵌套回调的异步事件,复杂的列表过滤和变换,或者时间相关问题。 我将尽量跳过对函数响应式编程学院式的解释(网络上已经有很多),并重点从实用的角度帮你理解什么是函数响应式编程,以及工作中怎么应用它
最近给UI添加粒子特效时,总是被UI遮挡, 解决方法是:   因为粒子系统的渲染顺序列默认为3000,而NGUI的渲染顺序默认也是从3000开始,当有嵌套的panel时或者Depth更高的panel时,GUI的渲染顺序会高于3000, 解决办法是, 1.修改Ngui中的UIPanel脚本中的默认的RenderQueue, 调整到3000以下,这样就不会遮挡住粒子特效了,当有的窗口需要显示在特效上面时,在检视面板中把该窗口的Renderer Q选项调整为Start At,值为3000以上,就可以解决,不过我的
Android网页浏览器开发详解(一) 请支持原创,尊重原创,转载请注明出处: http://blog.csdn.net/kangweijian (来自 kangweijian 的 csdn 博客)   Android 网页浏览器开发器开发详解 ( 一 ) ,主要通过 WebView 类实现载入网页,刷新网页, 向前载入历史网页,向后载入历史网页和缩放网页等五个功能。 Android 网页浏览器开发器开发详解 ( 二 ) ,主要实现书签和历史记录的保存,删除,编辑等功能。 Android 网页浏览器开发器

feekood 插件的安装教程 - 2015-03-10 11:03:02

最近发布了《飞翔的小鸟》有网友告诉我怎么安装插件啊!于是我抽空做了一下怎样安装feekood插件。 打开网页 http://www.wooyoogame.com/ 我是用的google浏览器哦!!!! 然后任意点击一个游戏 ,例如《飞翔的小鸟》 进入了这样的页面 4.此时注意我们要点击”点击下载”按钮 不要选择上面的安装插件!!如果安装了刷新页面再来一次重复第4步 5.下载完成后点击安装插件会弹出这样的提示,接下来就是傻瓜式的安装了。 6.安装结束了 7.点击退出 然后接着silverlight 8.安装

android Fragment生命周期介绍 - 2015-03-10 10:03:02

官网帮助文档链接:  http://developer.android.com/guide/components/fragments.html 主要看两张图,和跑代码 一,Fragment的生命周             二,与Activity生命周期的对比       场景演示 : 切换到该Fragment 11-29 14:26:35.095: D/AppListFragment(7649): onAttach 11-29 14:26:35.095: D/AppListFragment(7649):

Root你的设备(二) - 2015-03-10 10:03:02

理论上Root权限是系统的超级用户权限,Root之后的手机什么都能操作。这也就使得很多恶意应用与很多安全应用都在争夺Root权限,来完成自己的一些高权限的操作。当然,这些高权限的操作一些确实给用户带来了方便,但是,更多的Root后的操作往往是恶意的。这节我们具体看看对Root之后的设备,一般都能会有些什么操作。 1.1.1  静默安装 静默安装,指的是安装时无需任何用户干预,直接按默认设置安装应用。因为,它的无需用户干预,很多情况下变成了用户压根不知道,应用不知不觉就安装上了。是在推广上极为流氓的手段,很
例如QQ,飞信等IM软件保持跟Server的链接,同时标识出客户端的状态。是登录中、已经登录,还是注销等。 下面的状态机可以满足IM软件维持登录状态。 各个状态步骤说明: 1. 启动登录(跟logout相似) 2. 登录中。触发条件:手动登录,网络可用通知 3. 登录成功 4. 登录失败。原因有多种可能是网络 5.  密码被改了,本地登录还是使用旧的密码,直接注销 6. 因为网络问题掉线了 7. 手动或被动注销,被踢。 以上均个人开发过程中总结出来的,如有错误请斧正!