您的位置:首页 > 移动开发 > Android开发

Android studio配置使用GreenDao

2015-08-29 23:15 453 查看
greendao是一个移动开发的ORM框架,类似于WEB开发的Hibernate,使开发人员专注于软件业务逻辑,减少sql代码的编写(或是直接不写),帮助开发人员完成数据库表到对象的映射,同时,你可以使用面向对象的api,完成对对象的存储,添加,删除,修改,查询,复杂条件查询等操作,节约开发人员的时间专注于真正要解决的问题。此外,还支持关系的映射,类似hibernate 中的1对1,1对多等。

greenDao的设计目标

1. 对于Android是最快速的ORM框架。

2. 容易使用的APIS

3. 针对Android高度优化

4. 最小的内存消耗

5. library的个头很小

Android studio 配置GreenDao

本文使用的是greendao的最新2.0 的release包,首先要在项目的主module下的build.grale文件中配置如下依赖:

compile 'de.greenrobot:greendao:2.0.0'


在主module的src下,创建文件夹:java-gen,用来存放,生成的java对象和DAO接口。

在build.gradle文件中配置java-gen作为java代码的存储路径,如下所示最后一行。

java.srcDirs = ['src/main/java', 'build/generated/source/apt/${variant.dirName}',
'src/main/java-gen']


4.创建一个辅助的module项目,暂且称之为项目B。在android studio中选择项目类型是,要选择为android-lirbrary。

5.在项目B中的build.gradle文件中添加如下的依赖。

compile 'de.greenrobot:greendao-generator:2.0.0'


6.稍等Android studio为我们下载依赖。我们需要项目B来生成所需要得java对象和Dao接口对象。

7.项目B中就一个类,具体使用方式,见下面详细的代码。

public class MyDaoGenerator {
public static void main(String[] args) throws Exception {
Schema schema = new Schema( 4, "com.epic.traverse.bean");
// 参数1: 数据库版本号,后期为数据库增加字段时,需要增加版本号。否则会执行失败
// com.xxx.bean:自动生成的Bean对象会放到/java-gen/com/xxx/bean中

schema.setDefaultJavaPackageDao("com.epic.traverse.dao");
// DaoMaster.java、DaoSession.java、BeanDao.java会放到/java-gen/com/xxx/dao中

// 上面这两个文件夹路径都可以自定义,也可以不设置

initBean(schema); // 初始化Bean了

new DaoGenerator().generateAll(schema, "../traverse_table/app/src/main/java-gen");
// 自动创建,知名代码保存的路径,为我们第2部所设置的路径
}
private static void initBean(Schema schema) {

Entity msgBean = schema.addEntity("RecentMessage");//表名,类名
msgBean.setTableName("recent_msg"); // 可以对表重命名
msgBean.addIdProperty();// 主键,索引,默认为_id
msgBean.addIntProperty("targetid");
msgBean.addStringProperty("userName");
msgBean.addStringProperty("nick");
msgBean.addStringProperty("avatar");
msgBean.addStringProperty("message");
msgBean.addLongProperty("time");
msgBean.addLongProperty("type");
msgBean.addIntProperty("unread");
}
}


8.运行main方法,将会为我们生成Java对象,和Dao接口。代码路径为我们的主module的src/main/java-gen。

整个配置过程大概就是这样,下面说一下生成的类的作用。

9.生成的类解析:

DaoMaster:保存了sqlitedatebase对象以及操作DAO类,提供了创建和删除table的静态方法,其内部类OpenHelper和DevOpenHelper实现了SQLiteOpenHelper并创建数据库的框架。

DaoSession:存储了具体的对象的Dao操作类,

XXXDao:提供大量的方法来具体操作数据。

Android中的使用。我们可以将DaoMaster,DaoSession定义到Application中提供一个全局的对象,当我们需要操作数据库时,只需要在Activity中获取到DaoSession,并由其为我们创建具体的Dao类。

application代码如下:

public class MyApplication extends Application {
protected static final String TAG = "MyApplication";

private static MyApplication mInstance;

public static DaoMaster mDaoMaster;//得到DaoMaster
public static DaoSession mDaoSession;

/**
* 获取全局Application
*
* @return
*/
public static MyApplication getInstance() {
return mInstance;
}

@Override
public void onCreate() {
Log.d(TAG, "onCreate()");
mInstance = this;
super.onCreate();
}

public static DaoMaster getDaoMaster(Context context) {
if (mDaoMaster == null) {
DaoMaster.OpenHelper helper = new DaoMaster.DevOpenHelper(context, "message-db", null);
mDaoMaster = new DaoMaster(helper.getWritableDatabase());
}
return mDaoMaster;
}

public static DaoSession getDaoSession(Context context) {
if (mDaoSession == null) {
if (mDaoMaster == null) {
mDaoMaster = getDaoMaster(context);
}
mDaoSession = mDaoMaster.newSession();
}
return mDaoSession;
}
}


Activity 中具体的使用,可以通过application获得DaoSession ,通过它得到具体的Dao操作类。代码:

@AfterInject
public void afterInject() {
mDaosession = myApplication.getInstance().getDaoSession(getActivity());
messageDao = mDaosession.getRecentMessageDao();//得到具体的Dao操作类
}


通过greendao增删改查如下:

messageDao.insert(msg);
...
messageDao.deleteAll();


其他方法类似,针对查询有必要单独说一下,是通过构建一个QueryBuild对象实现的,传入我们的bean ,就可以完成查询结果的映射。代码:

QueryBuilder<RecentMessage> query = messageDao.queryBuilder();
List<RecentMessage> lists = query.list();//查询全部数据


queryBuilder还有其他的方法。感冒了,清鼻涕一直不断的滴落,只有简单的陈述一下了,它的方法就不写了,到用时再具体的看文档了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息