1. 前言
之所以写这篇博客,是希望我的经历能给各位入门greenDao3.0以上版本提供便捷。简单描述一下今天的经历:
事情的起因是Android项目中需要用到一款orm工具,greenDao的热度让我选择学习它。官方文档中这样写道:
greenDAO’s Features at a glance
- Maximum performance (probably the fastest ORM for Android); our benchmarks are open sourced too
- Easy to use powerful APIs covering relations and joins
- Minimal memory consumption
- Small library size (<100KB) to keep your build times low and to avoid the 65k method limit
- Database encryption: greenDAO supports SQLCipher to keep your user’s data safe
- Strong community: More than 5.000 GitHub stars show there is a strong and active community
官方对于其优点有更多的文字解释,然而我看中的是其Easy to use
接着我在官方文档上找到了其gitHub地址,先不管这么多,Down下源码再说。
幸福的是,官方文档还给出了使用向导,这下可以省下不少解读源码的过程。如下:
How to get started with greenDAO, Documentation
For first steps with greenDAO, please check the documentation, especially the getting started guide and the introduction tutorial.
真是福音。。。
当点开向导的时候,一脸蒙*,顶头的是三个连接,指向gitHub源码的地址,下文给出的一些“莫名其妙”的代码(当然这是开始的时候),说好的 easy to use 呢。不甘心的继续找,终于找到了引入方式,怪自己打开的方式不对。
// In your root build.gradle file:
buildscript {
repositories {
jcenter()
mavenCentral() // add repository
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.0'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
}
}
// In your app projects build.gradle file:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
dependencies {
compile 'org.greenrobot:greendao:3.2.2' // add library
}
谔谔,好吧,非maven项目请绕行,非AS项目请勿入。
当然不可能,虽说现在maven构建项目已经是主流,但是不可能大大小小的项目都用maven构建,eclipse也没用完完全全消失,肯定会有解决方案的。
不少大神已经在论坛上发表了相关文章(我参考的博文),度娘了一番,找到不少方案,实行起来却是遇到不少麻烦,各中报错,各种度娘依旧没用,难到我的eclipse和博主的不一样???当然不是,工具的问题很好解决,问题出在了源码上,我犯了一个很严重的错误,忽略版本号!!!花了大量的时间。
大神的博文版本多为3.0一下的,而我下载的是最新的源码,官方也有说明(后来研究的时候才发现)3.0之后有了改变, ,没有参考,自己摸索吧。
好了,废话不多说,进入正题:
2. greenDao 如何在eclipse中引入:
2.1 下载greenDao相关jar包
和之前博主使用的方法有所差别,我在研究源码的过程中,找到了jar包,方便的也就直接给大家推荐jar包,虽然源码和jar包是一回事,但是在使用eclipse的时候,添加jar包总感觉会比添加依赖项目方便。
下载地址:
http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.greenrobot%22
(这是maven项目的jar包仓库,所有的jar包都在里面,以后有找不到jar包的朋友可以来这里面找)
下载内容:greenDao-3.2.2版本(这是我所看见最新的)
需要下载的jar包有3个,注意都下同一版本的
2.2 下载 freemarker.jar
这是代码生成器依赖的jar包,关于代码生成器,之后在解释。
下载地址(同样在仓库中下载)
http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.freemarker%22%20AND%20a%3A%22freemarker%22
下载内容:下一个就行(我使用的是2.3.27版本)
2.3 配置代码生成器(GreenDao_Generator_Test)
代码生成器是一个java工程。
新建java工程,导入 greendao-generator.jar (这里我省略写版本号)以及freemarker.jar ,目录结构如下:
新建一个主类,用于执行程序,主类代码如下:
(这个程序用于生成实体类以及实体数据库操作的dao类)
import org.greenrobot.greendao.generator.DaoGenerator;
import org.greenrobot.greendao.generator.Entity;
import org.greenrobot.greendao.generator.Schema;
public class DaoGeneratorTtest {
public static void main(String[] args) throws Exception {
// 设置实体类包名(可自行修改)
Schema schema = new Schema(1, "com.example.bean");
// 设置DAO层包名(可自行修改)
schema.setDefaultJavaPackageDao("com.example.dao");
// 定义实体类
addNote(schema);
// 生成代码后的存放路径,这里放到了 android 项目(GreenDaoTest)下的src 目录下
new DaoGenerator().generateAll(schema, "../GreenDaoTest/src");
}
private static void addNote(Schema schema) {
// 实体类名
Entity person = schema.addEntity("Person");
// 添加id
person.addIdProperty();
// 添加 firstname 字段
person.addStringProperty("firstname").notNull();
// 添加 lastname 字段
person.addStringProperty("lastname");
// 添加 age 安段
person.addStringProperty("age");
}
}
2.4 配置android项目(GreenDaoTest)
在使用greendao的android项目中导入greendao.jar以及greendao-api.jar
只进行了导包的android项目如图所示:
2.5 运行 java项目(GreenDao_Generator_Test)
出现如下图所示的输出,表示代码生成器成功运行了:
这时按F5刷新eclipse,再来看看 android项目 (GreenDaoTest) :
com.example.bean 包以及 com.example.dao 包 都是在代码生成器程序中自己配置的
到此为止,已经成功把GreenDao引入了android项目中,需要增删改查等数据库操作,dao包中都已经生成好了,使用的时候调用就行。
这才是真的实现了 easy to use !!!
3. 一些额外的解释
3.1 源码和jar包的对应关系
DaoCore是源码包
DaoGenerator是代码生成器的代码包
greendao-api 实体注解支持 (org.greenrobot.greendao.annotation包就在里面)
其他的是一些示例工程以及测试文件,入门请忽略,直接去看给出的示例会让人更懵。。。(好吧,理解之后示例确实很有帮助)
不得不提一下的是 注解支持的 greendao-api,网上的教程多没有涉及这一部分,导致开始的报错也是无从解决,找了无数遍源码也找不到 org.greenrobot.greendao.annotation包,后来研究的时候,才发现,原来这个东西藏在这里,这也是多出 greendao-api.jar 的原因。
3.2 为什么要使用代码生成器
代码生成器只是工具,方便开发者写出实体类以及数据库操作,当然,深入理解greendao的大牛可以手写这些代码。
每次加入实体类,先在代码生成器中用几行代码生成所需要的实体类以及相关操作类。
简单的生成操作已经在上面测试的代码生成器工程中给出 addNote()方法
3.3 相关链接
gitHub地址:https://github.com/greenrobot/greenDAO
greenDao官网:http://greenrobot.org/greendao/