这是一篇关于greenDao的简明使用教程(其实就是官网tutorial的一个大概的翻译)。
一共有四篇,链接如下:
实体建模
跟所有的orm一样,在使用greendao的时候,其实第一步你应该做的就是设计好能反映你application中数据存储结构的实体建模。greendao会根据这些model自动生成DAO代码到你的工程中。
在greendao中定义代码使用的是普通的java代码。下面我们用一幅图来说明greendao中定义model都要定义哪些东西:
Schema
Entity从属于Schema,一般来说需要先定义Schema,在schema的构造函数中需要制定两个参数:schema的版本号,还有生成代码整体的包名(包括entities,DAOs,和JUnit test代码)。
Schema schema = new Schema(1, "de.greenrobot.daoexample");
如果你想让生成的test代码有独立的命名空间的话,这样做:
schema.setDefaultJavaPackageTest("de.greenrobot.daoexample.test");
schema.setDefaultJavaPackageDao("de.greenrobot.daoexample.dao”);
schema另外支持对entities的两个默认开关的修改,这两个开关控制entities是否是active的,还有entities是否采用了用户编辑区域(keep sections)
schema2.enableKeepSectionsByDefault();
schema2.enableActiveEntitiesByDefault();
Entities
一旦创建了Schema,下面就可以使用它来添加Entities了。
Entity user = schema.addEntity("User”);
Entity可以修改一些设置,但最重要的是可以entity中添加property。就像下面这样:
user.addIdProperty();
user.addStringProperty("name");
user.addStringProperty("password");
user.addIntProperty("yearOfBirth”);
除了这些属性,你还可以向entity添加to-one,to-many关系。
Properties and primary keys
之前的例子展示了如何为entity添加一个property,事实上addXXXProperty方法返回一个PropertyBuilder对象。返回的PropertyBuilder对象可以用来设置property。比如,你可以通过返回对象的columnName方法来重新设置该property在数据库中存储的字段名。如果要使用property对象添加索引(indices)或者关系(relations),可以通过调用PropertyBuilder上的getProperty方法获取。
目前的主键限制(primary key (PK) restrictions):目前Entity必须有一个long型的property作为主键,这个也是Android和sqlite中推荐的做法。
Defaults
GreenDao对各种操作和对象提供了合理的默认值。举个例子,greendao生成的database的table和column名称都源自entity和property的名称。与JAVA中的camel命名规则不同,默认的database名称采用全大写加下划线分割的命名规则,比如一个叫做creationDate的property,在databse的colum中默认就变成了CREATION_DATE。
Triggering generation
一旦你的entity schema准备好了,你就可以触发生成Entity和DAOs代码了。在generator project(普通的java工程,需要一个静态的main方法),在main方法中初始化一个DaoGenerator,并调用generateAll方法。像下面这样:
DaoGenerator daoGenerator = new DaoGenerator();
daoGenerator.generateAll(schema, "../MyProject/src-gen”);
在这里你只需要指定用来生成代码的entity schema和代码输出目录(这个目录通常应该是你的Android project目录)。
Keep sections
Entity的生成代码在每次生成的时候都会覆盖,通过使用“keep sections”可以添加用户自己的代码,并确保不会被覆盖。首先激活这个功能需要在schema中调用enableKeepSectionsByDefault() ,或者在entity中调用setHasKeepSections(true) 。一旦激活,keep sections将会在生成的entity代码中被添加。像下面这个样子:
// KEEP INCLUDES - put your custom includes here
// KEEP INCLUDES END
...
// KEEP FIELDS - put your custom fields here
// KEEP FIELDS END
...
// KEEP METHODS - put your custom methods here
// KEEP METHODS END
现在你可以把你自己的代码放在KEEP […]和KEEP [...] END中间,注意不要修改keep的注释。
尽管如此,还是建议另外保存一下这部分的代码,以备万一。