greenDAO系列4--构建模型

来源:互联网 发布:威廉叶芝知乎 编辑:程序博客网 时间:2024/05/22 15:47

本文转自:http://my.oschina.net/u/1052509/blog/312590


摘要 在项目中使用greenDAO的第一步是创建实体模型,实体模型代表你应用中会使用到的持久化数据。基于该模型,greenDao生产DAO类相关的java代码。
android sqlite greenDAO

    在项目中使用greenDAO的第一步是创建实体模型,实体模型代表你应用中会使用到的持久化数据。基于该模型,greenDao生产DAO类相关的java代码。

     该模型本身是通过java代码来定义的。它很简单:参考DaoExampleGenerator项目,创建一个java项目。详情可查看“如何开始”的章节。

    上图描述构建实体的相关类,你可以使用这些类描述你的特定模型。


模式(Schema)

    实体(entity)属于一个模式(schema)。模式是你需要定义的第一个对象。调用其构造方法,传入其模式版本(数据库版本)和默认Java包。

?
1
Schema schema = new Schema(1"de.greenrobot.daoexample");

    当greenDAO生成entities,DAOs和JUnit测试时会用到缺省包名。如果在项目中它们都采用缺省值,你现在就已经完成了第一步。 如果你想将DAO和测试类放在指定的包名,可以如下设置schema:

?
1
2
schema.setDefaultJavaPackageTest("de.greenrobot.daoexample.test");
schema.setDefaultJavaPackageDao("de.greenrobot.daoexample.dao");

    schema中还有两个实体缺省标识可以设置。分别表示实体为主动和使用保留片段。这些特性文档中没有说明,可以看看项目的测试代码:

?
1
2
schema2.enableKeepSectionsByDefault();
schema2.enableActiveEntitiesByDefault();


实体

    实体中有几个设置你可以改变,最重要的是你可以添加实体属性(properties):

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

    除了属性,还可为该实体添加to-one和to-many关系。


属性和主键

    上一节展示了如何添加属性到实体。实体类的addXXXProperty方法返回PropertyBuilder对象,可用于配置属性。例如,用columnName方法自定义字段名。创建索引或关系时需要访问属性对象,可调用PropertyBuider对象的getProperty()方法获取。

    主键限制:目前,实体必须有一个long或Long类型的属性作为主键。这是Android和SQLite的推荐做法。greenDAO未来将支持更多的主键方案,但未必完全支持。一种变通的方法:你可使用long类型的主键和用一个唯一索引为真正“意图”的主键。


缺省

    greenDAO尽量使用合理的缺省值,故开发者无需处处都设置。如数据库的表名和字段名源于实体和属性的名字。数据库缺省命名,不使用java的驼峰命名风格,而是全部大写且用下划线分割单词。如:属性名为“creationDate”将变成数据库字段“CREATION_DATA”。


关系

    To-one和to-many关系的具体说明可查看“关系”章节。


继承,接口和序列化

    实体类可以继承非实体类。其父类可以通过setSuperclass(String)方法指定(注意:目前不可能有一个实体类作为作为其他实体类的父类)。举例:

?
1
myEntity.setSuperclass("MyCommonBehavior");

    通常最好使用接口作为实体的公共基础属性和行为。如:实体A和B公共拥有一组属性,这些属性可以定义在接口C,如下例子,同时设置实体B为可序列化:

?
1
2
3
entityA.implementsInterface("C");
entityB.implementsInterface("C");
entityB.implementsSerializable();


进行生成

    schema定义好后,便可进行代码生成。在生成器项目(一个有静态main方法的Java项目)中,初始化DaoGenerator并调用generateAll方法。

?
1
2
DaoGenerator daoGenerator = new DaoGenerator();
daoGenerator.generateAll(schema, "../MyProject/src-gen");

    只需指定schema类和一个目标目录,通常是一个Android项目的源文件夹,如果测试类在另外一个目录,可在第三个参数指定。


保留片段

    通常,实体类每生成一次都会被覆盖。greenDAO可以在实体类中保留自定义的代码片段。使其生效,可在schema调用enableKeepSectionsByDefault()或对实体调用setHasKeepSections(true)。一旦生效,三个保持片段就会在代码中生成:

?
1
2
3
4
5
6
7
8
// 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部分的注释。KEEP之间的代码在代码生成过程中会保留。


0 0
原创粉丝点击