Android版Requery是否自动生成类?修改Person实体类后会有何变化?
Requery注解修改Person类后的变化与自动生成类确认
针对你的问题,我来详细拆解修改后的变化,以及Android平台Requery的自动生成能力:
一、修改Person类后会发生这些变化:
- 自动生成实体实现类:Requery的注解处理器会在编译阶段自动生成一个继承自抽象
Person类的具体实现类(默认命名为PersonEntity,你也可以通过@Entity(name = "自定义类名")指定)。这个生成的类会自动帮你实现所有字段的getter、setter方法,还有equals()、hashCode()、toString()这些通用方法,完全不用你手动编写。 - 数据库表映射:
@Entity注解会把这个抽象类映射为数据库中的一张表(默认表名和类名一致,可通过注解参数修改)。其中@Key @Generated标记id字段为数据库主键,并且会自动生成主键值(比如自增ID);@Index("name")会给name字段创建数据库索引,能提升基于name字段的查询效率。 - 类结构的适配:把原来的私有普通类改成抽象类,是因为Requery需要基于这个抽象定义来生成具体的实体实现。你在业务代码中可以直接通过
Person抽象类来引用实例,降低代码耦合度。另外注意要把类的访问权限调整为public(至少包级可见),否则注解处理器无法处理,生成的类也没法被其他代码调用。 - 字段的数据库约束:除了主键和索引,Requery还会根据注解自动处理字段的数据库约束,比如如果字段是基本类型(像你的
int id),默认会被设为非空;如果是引用类型(比如String name),默认允许为空,你也可以通过@Column(nullable = false)来强制非空。
二、Android平台Requery是否会自动生成类?
完全可以!Requery在Android平台通过**注解处理器(Annotation Processor)**在编译阶段自动完成代码生成。你只需要确保在Module级的build.gradle中正确配置了Requery的依赖(包括核心库和注解处理器依赖),编译时处理器就会自动生成对应的实体类。生成的类一般存放在build/generated/source/apt/debug(Java项目)或build/generated/source/kapt/debug(Kotlin项目)目录下,你可以直接在代码中使用这些生成的类,比如通过Requery的数据库实例获取PersonEntity的对象。
额外注意点:
- 抽象的
Person类不需要编写构造函数,Requery会为生成的实体类提供合适的构造方法。 - 如果需要添加不需要映射到数据库的字段,可以用
@Transient注解标记,这样Requery不会把它生成到数据库表中,也不会生成对应的getter/setter。
内容的提问来源于stack exchange,提问作者Asim
相关产品推荐
相关产品推荐

