androidentity什么用_Android greenDao schema entity使用详解

本文将会讲解greenDao的schema,entity,以及property的使用方法,如何在greenDao中使用继承,接口,序列化,以及保留自定义属性和方法等。

使用greenDao的第一步就是创建实体模型(entity model),用它来表示应用程序中使用的持久化数据。然后,greenDao基于这些模型生成Dao层的java代码。

Model本身也是java代码定义的。非常简单,基于DaoExampleGenerator创建一个java project。你可以查看(greenDao使用-快速上手)来了解详细代码。

右边展示的图例描述了meta model(元模型)。那就是用来描述领域模型的类。

Schema

Entities属于Schema的一部分。Schema是需要定义的第一个object。调用构造方法,其中包含两个参数,schema version和默认的Java package

Schema schema = new Schema(1, “de.greenrobot.daoexample”);

默认的Java package用来作为entities,DAOs以及Junit tests的包名。第一步就这么愉快的完成了。

如果想DAO和test代码分别用不同的packages,可以像下面这样重新定义:

schema.setDefaultJavaPackageTest("de.greenrobot.daoexample.test");

schema.setDefaultJavaPackageDao("de.greenrobot.daoexample.dao");

1

2

3

schema.setDefaultJavaPackageTest("de.greenrobot.daoexample.test");

schema.setDefaultJavaPackageDao("de.greenrobot.daoexample.dao");

Schema还有两个默认的flags用来控制entities,一个flag设置entities是否激活,如果需要用到keep sections(段落保持:保留自定义的字段和方法等,允许手动修改已经生成的entities)。这些特性还没有写入文档;但是可以从源码的测试工程中找到。

schema2.enableKeepSectionsByDefault();

schema2.enableActiveEntitiesByDefault();

1

2

3

schema2.enableKeepSectionsByDefault();

schema2.enableActiveEntitiesByDefault();

Entities

创建了schema对象之后,就可以使用schema添加entities,entity有许多的属性可以设置,更重要的是你可以给它添加properties:

Entity user = schema.addEntity("User");

user.addIdProperty();

user.addStringProperty("name");

user.addStringProperty("password");

user.addIntProperty("yearOfBirth");

1

2

3

4

5

6

Entityuser=schema.addEntity("User");

user.addIdProperty();

user.addStringProperty("name");

user.addStringProperty("password");

user.addIntProperty("yearOfBirth");

除了属性之外,还可以给entity添加many-to-one和one-to-many的关系。

Properties and primary keys

上一节讲解了如何给entity添加properties,Entity的addXXXProperty方法返回一个PropertyBuilder对象,用它来配置property。例如,使用columnName方法来覆盖默认的列名称。可以调用PropertyBuilder的getProperty方法创建一个property对象的引用。

主键约束(Current primary key (PK) restrictions): 目前,entities必须有一个主键(primary key),并且必须是long类型。这是Android和SQLite推荐的做法。greenDao在将来会支持其他类型的主键。关于这个问题,你可以使用一个long类型的主键,然后用一个逻辑上唯一的index来表达你的“key”属性。也就是说一个数据库层面的主键,一个逻辑意义上的主键(把逻辑主键加上索引)。

Defaults

greenDao以合理的默认配置运行,所以不需要做过多的配置。例如,数据库中的table name和column name就直接使用entity和property的名字。数据库的命名规范不是Java的驼峰风格,而是采用下划线分割单词并大写。例如,property名称是“creationDate”,那么在数据库中对应的column名称应该是“CREATION_DATE”。

Relations

Many-to-one和one-to-many关系详细讲解。

继承,接口,序列化(Inheritance, Interfaces, and Serializable)

Entities可以继承于非实体类(non-entity)。通过setSuperclass(String)方法来指定其父类(super class)。例如:

myEntity.setSuperclass("MyCommonBehavior");

注意:目前不支持entity作为父类(也就是说不支持多态查询)。

使用interface来表达entity属性和行为的基本操作是很好的做法。例如,如果entity A和B共享一些properties,这些properties的getters和setters方法就可以定义到interface C里面。就像下面所展示的代码一样,同时还设置entity B为Serializable:

entityA.implementsInterface("C");

entityB.implementsInterface("C");

entityB.implementsSerializable();

1

2

3

4

entityA.implementsInterface("C");

entityB.implementsInterface("C");

entityB.implementsSerializable();

生成代码(Triggering generation)

Entity schema准备好之后,就可以生成代码了。执行generator project(一个普通的Java project拥有一个static main()方法),需要初始化一个DaoGenerator然后调用generateAll方法:

DaoGenerator daoGenerator = new DaoGenerator();

daoGenerator.generateAll(schema, "../MyProject/src-gen");

1

2

3

DaoGeneratordaoGenerator=newDaoGenerator();

daoGenerator.generateAll(schema,"../MyProject/src-gen");

如代码所示,只需要传人schema和一个目标路径,通常就是Android项目的源码路径。如果想要test classes生成到另外的目录,可以指定另外一个目录作为第三个参数。

Keep sections

每次重新生成代码的时候(比如:数据库升级的时候,需要重新生成代码)Entity classes都会被重新写入。为了能够将自定义的代码被保留下来,greenDao提供了“keep sections”。用schema的enableKeepSectionsByDefault()或者entities的setHasKeepSections(true)方法开启。开启之后,三段keep section会在entities中生成。

// 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

1

2

3

4

5

6

7

8

9

// 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之间的代码会被保留。

注意:在重新生成代码之前,备份或者提交代码是一个很好的习惯,避免误操作带来的代码丢失。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值