greenDAO系列4--构建模型

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


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

    在项目中使用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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值